aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Support/Process.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Support/Process.cpp')
-rw-r--r--lib/Support/Process.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/Support/Process.cpp b/lib/Support/Process.cpp
index 88ca7c3..8d1b648 100644
--- a/lib/Support/Process.cpp
+++ b/lib/Support/Process.cpp
@@ -11,8 +11,9 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/Support/Process.h"
#include "llvm/Config/config.h"
+#include "llvm/Support/Process.h"
+#include "llvm/Support/ErrorHandling.h"
namespace llvm {
using namespace sys;
@@ -22,6 +23,25 @@ using namespace sys;
//=== independent code.
//===----------------------------------------------------------------------===//
+// Empty virtual destructor to anchor the vtable for the process class.
+process::~process() {}
+
+self_process *process::get_self() {
+ // Use a function local static for thread safe initialization and allocate it
+ // as a raw pointer to ensure it is never destroyed.
+ static self_process *SP = new self_process();
+
+ return SP;
+}
+
+// The destructor for the self_process subclass must never actually be
+// executed. There should be at most one instance of this class, and that
+// instance should live until the process terminates to avoid the potential for
+// racy accesses during shutdown.
+self_process::~self_process() {
+ llvm_unreachable("This destructor must never be executed!");
+}
+
}
// Include the platform-specific parts of this class.