| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 } | 139 } |
| 140 ~ScopedIncrement() override { AtomicOps::Decrement(value_); } | 140 ~ScopedIncrement() override { AtomicOps::Decrement(value_); } |
| 141 | 141 |
| 142 private: | 142 private: |
| 143 volatile int* value_; | 143 volatile int* value_; |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 { | 146 { |
| 147 DebugNonReentrantCritScope cs(&crit_, &locked_); | 147 DebugNonReentrantCritScope cs(&crit_, &locked_); |
| 148 for (MessageQueue* queue : message_queues_) { | 148 for (MessageQueue* queue : message_queues_) { |
| 149 if (queue->IsQuitting()) { | 149 if (!queue->IsProcessingMessages()) { |
| 150 // If the queue is quitting, it's done processing messages so it can | 150 // If the queue is not processing messages, it can |
| 151 // be ignored. If we tried to post a message to it, it would be dropped. | 151 // be ignored. If we tried to post a message to it, it would be dropped |
| 152 // or ignored. |
| 152 continue; | 153 continue; |
| 153 } | 154 } |
| 154 queue->PostDelayed(RTC_FROM_HERE, 0, nullptr, MQID_DISPOSE, | 155 queue->PostDelayed(RTC_FROM_HERE, 0, nullptr, MQID_DISPOSE, |
| 155 new ScopedIncrement(&queues_not_done)); | 156 new ScopedIncrement(&queues_not_done)); |
| 156 } | 157 } |
| 157 } | 158 } |
| 158 // Note: One of the message queues may have been on this thread, which is why | 159 // Note: One of the message queues may have been on this thread, which is why |
| 159 // we can't synchronously wait for queues_not_done to go to 0; we need to | 160 // we can't synchronously wait for queues_not_done to go to 0; we need to |
| 160 // process messages as well. | 161 // process messages as well. |
| 161 while (AtomicOps::AcquireLoad(&queues_not_done) > 0) { | 162 while (AtomicOps::AcquireLoad(&queues_not_done) > 0) { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 | 245 |
| 245 void MessageQueue::Quit() { | 246 void MessageQueue::Quit() { |
| 246 AtomicOps::ReleaseStore(&stop_, 1); | 247 AtomicOps::ReleaseStore(&stop_, 1); |
| 247 WakeUpSocketServer(); | 248 WakeUpSocketServer(); |
| 248 } | 249 } |
| 249 | 250 |
| 250 bool MessageQueue::IsQuitting() { | 251 bool MessageQueue::IsQuitting() { |
| 251 return AtomicOps::AcquireLoad(&stop_) != 0; | 252 return AtomicOps::AcquireLoad(&stop_) != 0; |
| 252 } | 253 } |
| 253 | 254 |
| 255 bool MessageQueue::IsProcessingMessages() { |
| 256 return !IsQuitting(); |
| 257 } |
| 258 |
| 254 void MessageQueue::Restart() { | 259 void MessageQueue::Restart() { |
| 255 AtomicOps::ReleaseStore(&stop_, 0); | 260 AtomicOps::ReleaseStore(&stop_, 0); |
| 256 } | 261 } |
| 257 | 262 |
| 258 bool MessageQueue::Peek(Message *pmsg, int cmsWait) { | 263 bool MessageQueue::Peek(Message *pmsg, int cmsWait) { |
| 259 if (fPeekKeep_) { | 264 if (fPeekKeep_) { |
| 260 *pmsg = msgPeek_; | 265 *pmsg = msgPeek_; |
| 261 return true; | 266 return true; |
| 262 } | 267 } |
| 263 if (!Get(pmsg, cmsWait)) | 268 if (!Get(pmsg, cmsWait)) |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 pmsg->phandler->OnMessage(pmsg); | 538 pmsg->phandler->OnMessage(pmsg); |
| 534 int64_t end_time = TimeMillis(); | 539 int64_t end_time = TimeMillis(); |
| 535 int64_t diff = TimeDiff(end_time, start_time); | 540 int64_t diff = TimeDiff(end_time, start_time); |
| 536 if (diff >= kSlowDispatchLoggingThreshold) { | 541 if (diff >= kSlowDispatchLoggingThreshold) { |
| 537 LOG(LS_INFO) << "Message took " << diff << "ms to dispatch. Posted from: " | 542 LOG(LS_INFO) << "Message took " << diff << "ms to dispatch. Posted from: " |
| 538 << pmsg->posted_from.ToString(); | 543 << pmsg->posted_from.ToString(); |
| 539 } | 544 } |
| 540 } | 545 } |
| 541 | 546 |
| 542 } // namespace rtc | 547 } // namespace rtc |
| OLD | NEW |