| Index: runtime/bin/dbg_message.cc | 
| diff --git a/runtime/bin/dbg_message.cc b/runtime/bin/dbg_message.cc | 
| index 30eb7307216ce8beefcf2187106acf4f098582a3..e50754402223887f4360a5b6c438f3caf0c959ee 100644 | 
| --- a/runtime/bin/dbg_message.cc | 
| +++ b/runtime/bin/dbg_message.cc | 
| @@ -1096,8 +1096,18 @@ void DbgMsgQueue::MessageLoop() { | 
| while (true) { | 
| // Handle all available vm service messages, up to a resume | 
| // request. | 
| -    if (Dart_HandleServiceMessages()) { | 
| -      break; | 
| +    while (Dart_HasServiceMessages()) { | 
| +      // Release the message queue lock before handling service | 
| +      // messages.  This allows notifications to come in while we are | 
| +      // processing long requests and avoids deadlock with the PortMap | 
| +      // lock in the vm. | 
| +      msg_queue_lock_.Exit(); | 
| +      bool resume = Dart_HandleServiceMessages(); | 
| +      msg_queue_lock_.Enter(); | 
| +      if (resume) { | 
| +        // Resume requested through the vm service. | 
| +        break; | 
| +      } | 
| } | 
|  | 
| // Handle all available debug messages, up to a resume request. | 
|  |