Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d917d64f authored by Christopher Ferris's avatar Christopher Ferris Committed by Gerrit Code Review
Browse files

Merge "Only copy mcontext data from sigcontext."

parents 8814bd1d e4846076
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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.
//-------------------------------------------------------------------------
@@ -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();
+2 −4
Original line number Diff line number Diff line
@@ -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.