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

Commit a0962b68 authored by Christopher Ferris's avatar Christopher Ferris Committed by Android Git Automerger
Browse files

am d917d64f: Merge "Only copy mcontext data from sigcontext."

* commit 'd917d64f':
  Only copy mcontext data from sigcontext.
parents 21157abc d917d64f
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.