Index: webrtc/base/messagequeue.cc |
diff --git a/webrtc/base/messagequeue.cc b/webrtc/base/messagequeue.cc |
index 857cf12927cd89eb6cea31210065edf3574e5b24..0efecff6850cd705c25b343681087dfb988f6212 100644 |
--- a/webrtc/base/messagequeue.cc |
+++ b/webrtc/base/messagequeue.cc |
@@ -116,9 +116,9 @@ void MessageQueueManager::ClearInternal(MessageHandler *handler) { |
//------------------------------------------------------------------ |
// MessageQueue |
-MessageQueue::MessageQueue(SocketServer* ss) |
+MessageQueue::MessageQueue(SocketServer* ss, bool add_to_queue_manager) |
: ss_(ss), fStop_(false), fPeekKeep_(false), |
- dmsgq_next_num_(0) { |
+ dmsgq_next_num_(0), fDestroyed_(false) { |
if (!ss_) { |
// Currently, MessageQueue holds a socket server, and is the base class for |
// Thread. It seems like it makes more sense for Thread to hold the socket |
@@ -129,10 +129,21 @@ MessageQueue::MessageQueue(SocketServer* ss) |
ss_ = default_ss_.get(); |
} |
ss_->SetMessageQueue(this); |
- MessageQueueManager::Add(this); |
+ if (add_to_queue_manager) { |
+ MessageQueueManager::Add(this); |
pthatcher1
2016/02/03 23:51:47
If ww want to call MessageQueueManager::Add before
joachim
2016/02/04 00:01:20
With this call flow:
1. Start of Thread ctor
2. Me
|
+ } |
} |
MessageQueue::~MessageQueue() { |
+ DoDestroy(); |
+} |
+ |
+void MessageQueue::DoDestroy() { |
+ if (fDestroyed_) { |
+ return; |
+ } |
+ |
+ fDestroyed_ = true; |
// The signal is done from here to ensure |
// that it always gets called when the queue |
// is going away. |