diff options
-rw-r--r-- | third_party/libjingle/files/talk/base/signalthread.cc | 3 | ||||
-rw-r--r-- | third_party/libjingle/files/talk/base/signalthread.h | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/third_party/libjingle/files/talk/base/signalthread.cc b/third_party/libjingle/files/talk/base/signalthread.cc index 919d1c3..0b5154d6 100644 --- a/third_party/libjingle/files/talk/base/signalthread.cc +++ b/third_party/libjingle/files/talk/base/signalthread.cc @@ -10,10 +10,11 @@ using namespace talk_base; SignalThread::SignalThread() : main_(Thread::Current()), state_(kInit) { - worker_.parent_ = this; + worker_.SetParent(this); } SignalThread::~SignalThread() { + worker_.SetParent(NULL); } void SignalThread::SetPriority(ThreadPriority priority) { diff --git a/third_party/libjingle/files/talk/base/signalthread.h b/third_party/libjingle/files/talk/base/signalthread.h index 9e6bd05..ccba912 100644 --- a/third_party/libjingle/files/talk/base/signalthread.h +++ b/third_party/libjingle/files/talk/base/signalthread.h @@ -73,8 +73,19 @@ private: friend class Worker; class Worker : public Thread { public: + virtual void Run() { + CritScope cs(&parent_crit_); + if (parent_) + parent_->Run(); + } + void SetParent(SignalThread* parent) { + CritScope cs(&parent_crit_); + parent_ = parent; + } + + private: SignalThread* parent_; - virtual void Run() { parent_->Run(); } + CriticalSection parent_crit_; }; void Run(); |