diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2012-12-31 11:17:50 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2012-12-31 11:17:50 +0000 |
commit | 0184a841d3914bb78c7c6fa87ce9da86a2d5992a (patch) | |
tree | 0bea164d9df1c3dde7611bb875428e64340bb264 /lib/Support/Process.cpp | |
parent | dac1eeb4b7948456682e9aa641d2d5ef3eba8869 (diff) |
Begin sketching out the process interface.
The coding style used here is not LLVM's style because this is modeled
after a Boost interface and thus done in the style of a candidate C++
standard library interface. I'll probably end up proposing it as
a standard C++ library if it proves to be reasonably portable and
useful.
This is just the most basic parts of the interface -- getting the
process ID out of it. However, it helps sketch out some of the boiler
plate such as the base class, derived class, shared code, and static
factory function. It also introduces a unittest so that I can
incrementally ensure this stuff works.
However, I've not even compiled this code for Windows yet. I'll try to
fix any Windows fallout from the bots, and if I can't fix it I'll revert
and get someone on Windows to help out. There isn't a lot more that is
mandatory, so soon I'll switch to just stubbing out the Windows side and
get Michael Spencer to help with implementation as he can test it
directly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171289 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Process.cpp')
-rw-r--r-- | lib/Support/Process.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/Support/Process.cpp b/lib/Support/Process.cpp index 88ca7c3f22..8d1b64897c 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. |