| Index: webrtc/base/messagequeue.cc
|
| diff --git a/webrtc/base/messagequeue.cc b/webrtc/base/messagequeue.cc
|
| index 857cf12927cd89eb6cea31210065edf3574e5b24..bbdb941ffab4941107b347023f5ab23e0b762b42 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 init_queue)
|
| : ss_(ss), fStop_(false), fPeekKeep_(false),
|
| - dmsgq_next_num_(0) {
|
| + dmsgq_next_num_(0), fInitialized_(false), 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,30 @@ MessageQueue::MessageQueue(SocketServer* ss)
|
| ss_ = default_ss_.get();
|
| }
|
| ss_->SetMessageQueue(this);
|
| - MessageQueueManager::Add(this);
|
| + if (init_queue) {
|
| + DoInit();
|
| + }
|
| }
|
|
|
| MessageQueue::~MessageQueue() {
|
| + DoDestroy();
|
| +}
|
| +
|
| +void MessageQueue::DoInit() {
|
| + if (fInitialized_) {
|
| + return;
|
| + }
|
| +
|
| + fInitialized_ = true;
|
| + MessageQueueManager::Add(this);
|
| +}
|
| +
|
| +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.
|
|
|