Chromium Code Reviews| Index: base/threading/thread.cc |
| diff --git a/base/threading/thread.cc b/base/threading/thread.cc |
| index aca4ddbaa02a11c37ef02b39b5e4c3da829f404e..ba3efc09b37ffeea63df04f3e24829c7aed6a43e 100644 |
| --- a/base/threading/thread.cc |
| +++ b/base/threading/thread.cc |
| @@ -5,6 +5,7 @@ |
| #include "base/threading/thread.h" |
| #include "base/bind.h" |
| +#include "base/debug/alias.h" |
| #include "base/lazy_instance.h" |
| #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
| #include "base/threading/thread_id_name_manager.h" |
| @@ -172,6 +173,19 @@ bool Thread::GetThreadWasQuitProperly() { |
| void Thread::ThreadMain() { |
| { |
| +#if defined(OS_MACOSX) |
| + // Store the thread name on the stack to debug <http://crbug.com/274705>. |
| + // End with a byte sequence of <EOT><BEL><NUL> to make it easier to grep in |
| + // the minidump stack dump. |
| + const size_t kThreadNameSize = 50; |
| + char thread_name[kThreadNameSize] = { 0 }; |
|
Mark Mentovai
2013/09/12 18:52:18
Oh, you’re using strncpy, OK, you can get rid of t
|
| + strncpy(thread_name, name_.c_str(), kThreadNameSize); |
| + thread_name[kThreadNameSize - 1] = '\0'; |
| + thread_name[kThreadNameSize - 2] = '\7'; |
| + thread_name[kThreadNameSize - 3] = '\3'; |
| + base::debug::Alias(thread_name); |
| +#endif |
| + |
| // The message loop for this thread. |
| // Allocated on the heap to centralize any leak reports at this line. |
| scoped_ptr<MessageLoop> message_loop( |
| @@ -217,6 +231,10 @@ void Thread::ThreadMain() { |
| // We can't receive messages anymore. |
| message_loop_ = NULL; |
| + |
| +#if defined(OS_MACOSX) |
| + base::debug::Alias(thread_name); |
| +#endif |
| } |
| } |