diff options
Diffstat (limited to 'llvm/lib/Support/PrettyStackTrace.cpp')
| -rw-r--r-- | llvm/lib/Support/PrettyStackTrace.cpp | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/llvm/lib/Support/PrettyStackTrace.cpp b/llvm/lib/Support/PrettyStackTrace.cpp index c111c5e6be2..14290a1284f 100644 --- a/llvm/lib/Support/PrettyStackTrace.cpp +++ b/llvm/lib/Support/PrettyStackTrace.cpp @@ -15,11 +15,12 @@  #include "llvm/Support/PrettyStackTrace.h"  #include "llvm/Support/raw_ostream.h"  #include "llvm/System/Signals.h" +#include "llvm/System/ThreadLocal.h"  #include "llvm/ADT/SmallString.h"  using namespace llvm;  // FIXME: This should be thread local when llvm supports threads. -static const PrettyStackTraceEntry *PrettyStackTraceHead = 0; +static sys::ThreadLocal<const PrettyStackTraceEntry> PrettyStackTraceHead;  static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){    unsigned NextID = 0; @@ -34,12 +35,12 @@ static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){  /// PrintCurStackTrace - Print the current stack trace to the specified stream.  static void PrintCurStackTrace(raw_ostream &OS) {    // Don't print an empty trace. -  if (PrettyStackTraceHead == 0) return; +  if (PrettyStackTraceHead.get() == 0) return;    // If there are pretty stack frames registered, walk and emit them.    OS << "Stack dump:\n"; -  PrintStack(PrettyStackTraceHead, OS); +  PrintStack(PrettyStackTraceHead.get(), OS);    OS.flush();  } @@ -84,14 +85,14 @@ PrettyStackTraceEntry::PrettyStackTraceEntry() {    HandlerRegistered = HandlerRegistered;    // Link ourselves. -  NextEntry = PrettyStackTraceHead; -  PrettyStackTraceHead = this; +  NextEntry = PrettyStackTraceHead.get(); +  PrettyStackTraceHead.set(this);  }  PrettyStackTraceEntry::~PrettyStackTraceEntry() { -  assert(PrettyStackTraceHead == this && +  assert(PrettyStackTraceHead.get() == this &&           "Pretty stack trace entry destruction is out of order"); -  PrettyStackTraceHead = getNextEntry(); +  PrettyStackTraceHead.set(getNextEntry());  }  void PrettyStackTraceString::print(raw_ostream &OS) const { | 

