diff options
author | Sam McCall <sammccall@google.com> | 2019-10-23 12:36:36 +0200 |
---|---|---|
committer | Sam McCall <sammccall@google.com> | 2019-10-23 12:48:38 +0200 |
commit | 40668abca4d307e02b33345cfdb7271549ff48d0 (patch) | |
tree | 8a5fcbf77abeb5a2d362182cef542215e742c0d4 /llvm/lib/Support/Unix/Unix.h | |
parent | 4b63ca1379a8a6399c3d29560623ee832c818919 (diff) | |
download | llvm-40668abca4d307e02b33345cfdb7271549ff48d0.zip llvm-40668abca4d307e02b33345cfdb7271549ff48d0.tar.gz llvm-40668abca4d307e02b33345cfdb7271549ff48d0.tar.bz2 |
[Support] Add a way to run a function on a detached thread
This roughly mimics `std::thread(...).detach()` except it allows to
customize the stack size. Required for https://reviews.llvm.org/D50993.
I've decided against reusing the existing `llvm_execute_on_thread` because
it's not obvious what to do with the ownership of the passed
function/arguments:
1. If we pass possibly owning functions data to `llvm_execute_on_thread`,
we'll lose the ability to pass small non-owning non-allocating functions
for the joining case (as it's used now). Is it important enough?
2. If we use the non-owning interface in the new use case, we'll force
clients to transfer ownership to the spawned thread manually, but
similar code would still have to exist inside
`llvm_execute_on_thread(_async)` anyway (as we can't just pass the same
non-owning pointer to pthreads and Windows implementations, and would be
forced to wrap it in some structure, and deal with its ownership.
Patch by Dmitry Kozhevnikov!
Differential Revision: https://reviews.llvm.org/D51103
Diffstat (limited to 'llvm/lib/Support/Unix/Unix.h')
-rw-r--r-- | llvm/lib/Support/Unix/Unix.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Support/Unix/Unix.h b/llvm/lib/Support/Unix/Unix.h index 86309b0..1fc9a41 100644 --- a/llvm/lib/Support/Unix/Unix.h +++ b/llvm/lib/Support/Unix/Unix.h @@ -21,6 +21,7 @@ #include "llvm/Config/config.h" #include "llvm/Support/Chrono.h" #include "llvm/Support/Errno.h" +#include "llvm/Support/ErrorHandling.h" #include <algorithm> #include <assert.h> #include <cerrno> @@ -69,6 +70,14 @@ static inline bool MakeErrMsg( return true; } +// Include StrError(errnum) in a fatal error message. +LLVM_ATTRIBUTE_NORETURN static inline void ReportErrnumFatal(const char *Msg, + int errnum) { + std::string ErrMsg; + MakeErrMsg(&ErrMsg, Msg, errnum); + llvm::report_fatal_error(ErrMsg); +} + namespace llvm { namespace sys { |