Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1416)

Unified Diff: runtime/vm/message_handler.cc

Issue 1122503003: Display isolate message queue in Observatory debugger (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/message_handler.cc
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc
index 68344cb35db67ad979f96ade6edb381ee91f2d2d..58018858076d468e1f29470d79abc0a4ed21a7b6 100644
--- a/runtime/vm/message_handler.cc
+++ b/runtime/vm/message_handler.cc
@@ -34,6 +34,7 @@ class MessageHandlerTask : public ThreadPool::Task {
MessageHandler::MessageHandler()
: queue_(new MessageQueue()),
oob_queue_(new MessageQueue()),
+ oob_message_handling_allowed_(true),
live_ports_(0),
paused_(0),
pause_on_start_(false),
@@ -208,6 +209,9 @@ bool MessageHandler::HandleNextMessage() {
bool MessageHandler::HandleOOBMessages() {
+ if (!oob_message_handling_allowed_) {
+ return true;
+ }
MonitorLocker ml(&monitor_);
#if defined(DEBUG)
CheckAccess();
@@ -333,4 +337,39 @@ void MessageHandler::decrement_live_ports() {
live_ports_--;
}
+
+MessageHandler::AcquiredQueues::AcquiredQueues()
+ : handler_(NULL) {
+}
+
+
+MessageHandler::AcquiredQueues::~AcquiredQueues() {
+ if (handler_ != NULL) {
+ // Release ownership.
+ handler_->oob_message_handling_allowed_ = true;
+ handler_->monitor_.Exit();
+ }
turnidge 2015/05/04 17:47:13 Move the bulk of this into Reset.
Cutch 2015/05/04 19:56:51 Done.
+ Reset(NULL);
+}
+
+
+void MessageHandler::AcquiredQueues::Reset(MessageHandler* handler) {
+ handler_ = handler;
+ if (handler_ == NULL) {
+ return;
+ }
+ ASSERT(handler_ != NULL);
+ // Take ownership.
+ handler_->monitor_.Enter();
+ handler_->oob_message_handling_allowed_ = false;
turnidge 2015/05/04 17:47:13 Does this need to be done under the monitor here?
Cutch 2015/05/04 19:56:51 Done.
+}
+
+
+void MessageHandler::AcquireQueues(AcquiredQueues* acquired_queues) {
+ ASSERT(acquired_queues != NULL);
+ // No double dipping.
+ ASSERT(acquired_queues->handler_ == NULL);
+ acquired_queues->Reset(this);
+}
+
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698