diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-11-05 07:19:09 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-11-05 07:19:09 +0000 |
commit | f4d90ba9f59c6420f6c521df193b8602dc36e7ce (patch) | |
tree | 687aa1f3a5b6ec05f51b6512915a0773f9154ce9 /llvm/lib/Support/CrashRecoveryContext.cpp | |
parent | 2a39652303c2c319015d5b97fc569333bbaaa844 (diff) | |
download | bcm5719-llvm-f4d90ba9f59c6420f6c521df193b8602dc36e7ce.tar.gz bcm5719-llvm-f4d90ba9f59c6420f6c521df193b8602dc36e7ce.zip |
CrashRecoveryContext: Add RunSafelyOnThread helper function.
llvm-svn: 118272
Diffstat (limited to 'llvm/lib/Support/CrashRecoveryContext.cpp')
-rw-r--r-- | llvm/lib/Support/CrashRecoveryContext.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Support/CrashRecoveryContext.cpp b/llvm/lib/Support/CrashRecoveryContext.cpp index 93af79bc0f5..f24d6bdad84 100644 --- a/llvm/lib/Support/CrashRecoveryContext.cpp +++ b/llvm/lib/Support/CrashRecoveryContext.cpp @@ -205,3 +205,26 @@ const std::string &CrashRecoveryContext::getBacktrace() const { assert(CRC->Failed && "No crash was detected!"); return CRC->Backtrace; } + +// + +namespace { +struct RunSafelyOnThreadInfo { + void (*UserFn)(void*); + void *UserData; + CrashRecoveryContext *CRC; + bool Result; +}; +} + +static void RunSafelyOnThread_Dispatch(void *UserData) { + RunSafelyOnThreadInfo *Info = + reinterpret_cast<RunSafelyOnThreadInfo*>(UserData); + Info->Result = Info->CRC->RunSafely(Info->UserFn, Info->UserData); +} +bool CrashRecoveryContext::RunSafelyOnThread(void (*Fn)(void*), void *UserData, + unsigned RequestedStackSize) { + RunSafelyOnThreadInfo Info = { Fn, UserData, this, false }; + llvm_execute_on_thread(RunSafelyOnThread_Dispatch, &Info, RequestedStackSize); + return Info.Result; +} |