Loading libbacktrace/BacktraceThread.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ void ThreadEntry::Wake() { futex(&futex_, FUTEX_WAKE, INT_MAX, NULL, NULL, 0); } void ThreadEntry::CopyUcontextFromSigcontext(void* sigcontext) { ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(sigcontext); // The only thing the unwinder cares about is the mcontext data. memcpy(&ucontext_.uc_mcontext, &ucontext->uc_mcontext, sizeof(ucontext->uc_mcontext)); } //------------------------------------------------------------------------- // BacktraceThread functions. //------------------------------------------------------------------------- Loading @@ -129,7 +135,7 @@ static void SignalHandler(int, siginfo_t*, void* sigcontext) { return; } entry->CopyUcontext(reinterpret_cast<ucontext_t*>(sigcontext)); entry->CopyUcontextFromSigcontext(sigcontext); // Indicate the ucontext is now valid. entry->Wake(); Loading libbacktrace/BacktraceThread.h +2 −4 Original line number Diff line number Diff line Loading @@ -40,14 +40,12 @@ public: static void Remove(ThreadEntry* entry); inline void CopyUcontext(ucontext_t* ucontext) { memcpy(&ucontext_, ucontext, sizeof(ucontext_)); } void Wake(); void Wait(int); void CopyUcontextFromSigcontext(void*); inline void Lock() { pthread_mutex_lock(&mutex_); // Reset the futex value in case of multiple unwinds of the same thread. Loading Loading
libbacktrace/BacktraceThread.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ void ThreadEntry::Wake() { futex(&futex_, FUTEX_WAKE, INT_MAX, NULL, NULL, 0); } void ThreadEntry::CopyUcontextFromSigcontext(void* sigcontext) { ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(sigcontext); // The only thing the unwinder cares about is the mcontext data. memcpy(&ucontext_.uc_mcontext, &ucontext->uc_mcontext, sizeof(ucontext->uc_mcontext)); } //------------------------------------------------------------------------- // BacktraceThread functions. //------------------------------------------------------------------------- Loading @@ -129,7 +135,7 @@ static void SignalHandler(int, siginfo_t*, void* sigcontext) { return; } entry->CopyUcontext(reinterpret_cast<ucontext_t*>(sigcontext)); entry->CopyUcontextFromSigcontext(sigcontext); // Indicate the ucontext is now valid. entry->Wake(); Loading
libbacktrace/BacktraceThread.h +2 −4 Original line number Diff line number Diff line Loading @@ -40,14 +40,12 @@ public: static void Remove(ThreadEntry* entry); inline void CopyUcontext(ucontext_t* ucontext) { memcpy(&ucontext_, ucontext, sizeof(ucontext_)); } void Wake(); void Wait(int); void CopyUcontextFromSigcontext(void*); inline void Lock() { pthread_mutex_lock(&mutex_); // Reset the futex value in case of multiple unwinds of the same thread. Loading