Commit Graph

85 Commits

Author SHA1 Message Date
John McCutchan 2bde865138 Fix NotifyPauseOnStart and NotifyPauseOnExit dead lock
BUG=
R=turnidge@google.com

Review URL: https://codereview.chromium.org//1312793004 .
2015-08-24 10:47:40 -07:00
Zachary Anderson d4d89d6f12 Reverts VM thread cleanup
BUG=

Review URL: https://codereview.chromium.org//1275853008 .
2015-08-07 19:10:31 -07:00
Zachary Anderson 55bfb3d54b Clean VM thread shutdown:
Second attempt at: https://codereview.chromium.org/1177153005/

This time with fixed error propagation in the embedder.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1279733003 .
2015-08-07 18:42:00 -07:00
Zachary Anderson 4ca87e6d88 Revert VM thread cleanup
TBR

BUG=

Review URL: https://codereview.chromium.org//1270323002 .
2015-08-05 01:27:01 -07:00
Zachary Anderson 174d552574 Enables clean VM shutdown.
. Disables isolate spawning during Dart_Cleanup.
. Adds a static call Isolate::KillAllIsolates, which sends the
  OOB Kill message to all isolates when called from
  Dart_Cleanup.
. Modifies thread pool shutdown to block until all threads have
  exited.
. Fixes tests.

BUG=
R=turnidge@google.com

Review URL: https://codereview.chromium.org//1177153005 .
2015-08-04 23:29:25 -07:00
John McCutchan 5401622c8a Ensure that the ThreadInterrupter is awake after debugging
When possible the ThreadInterrupter enters a deep sleep mode (to conserve CPU usage). We wake the ThreadInterrupter up whenever we schedule an isolate on a thread, but, two edges cases that were not covered:

* After explicitly starting an isolate that was paused with --pause-isolates-on-start the thread interrupter may not wake up.

* After continuing an isolate that was being single stepped.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org//1142283003
2015-05-20 06:49:35 -07:00
johnmccutchan@google.com 2f7cff7170 Display isolate message queue in Observatory debugger
- Log the parameters to RPCs
- Display messages like stack frames
    - handler function and script visible
    - message preview instead of local variables
- Expanded and previewed messages do not collapse when stepping within the existing message
- Mark patch classes as finalized to avoid ASSERT on class_finalizer.cc:2358 **
- Support iterating over message queues
- Support printing the message queue as JSON
- Inhibit OOB messages from being handled if we are iterating over the message queue
    - avoids dead lock when looking up port handler (done in Dart code with message handler locked) and a stack overflow trigger to handle OOB messages
- make getObject understand message ids
- Fix dartbug.com/23355

** Need to discuss with Ivan and Matthias (reviewed code differs from committed code but matches my fix):
https://codereview.chromium.org//828353002
https://code.google.com/p/dart/source/detail?r=42612

R=turnidge@google.com

Review URL: https://codereview.chromium.org//1122503003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45505 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-04 20:20:44 +00:00
turnidge@google.com 1989cc3ac8 Yesterday's deadlock fix was wrong. It could drop notifications.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//995883002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44382 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-10 18:15:37 +00:00
turnidge@google.com bb0ef6edb8 Fix null pointer deref in message_handler.cc
BUG=
R=iposva@google.com

Review URL: https://codereview.chromium.org//991863006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44355 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-10 00:39:25 +00:00
turnidge@google.com 1f851c718c Implement 'print', 'up', 'down', and 'frame' commands in the Observatory debugger.
Implement in-frame evaluation in the vm service.

Add a notion of 'current frame' and use it across the debugger,
particularly in source-location based commands (break, clear).

Change the expansion logic for frames, so that by default only the
current frame is shown.  When a user expands a frame it is now pinned.

Change command line parsing so that internal whitespace is preserved.  We need this to properly evaluate expressions with internal whitespace.

Fix a deadlock in the debugger message loop.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//993613002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44353 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-10 00:07:45 +00:00
turnidge@google.com f9f2d9c017 Major rework of vm service events
--------
VM

Add a new ServiceEvent class in the vm.  Rework the event type names.

Add BreakpointAdded, BreakpointResolved, and BreakpointRemoved
service events.

Record the top frame for kIsolateInterrupted and kExceptionThrown
debugger events.

Send a top frame in more Pause* events.

Send breakpoint list with the Isolate response.  Remove the
getBreakpoints method from the vm service.

Move Resume events into debugger.cc.

Rework MessageHandler a bit so that we can send PauseStart and
PauseExit notifications.

--------
Observatory

Move some event handler from Application to Isolate.

Rewrite breakpoint tracking code to use the new breakpoint events.

Change run state tracking in Isolate.

Change getFromMap so that it applies updates if the map isn't a ref.

Use getFromMap instead of new ServiceObject in invokeRpc.  This
fixes some duplicate ServiceObject problems.

Review URL: https://codereview.chromium.org//979823003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44268 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-05 19:02:42 +00:00
koda@google.com 6666c2502b Fix use-after-free in MessageHandler.
BUG=dart:22474
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//933183003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43847 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-18 16:43:07 +00:00
johnmccutchan@google.com 47664bbfd2 Move StartIsolateScope into MessageHandler::HandleMessages
R=iposva@google.com, turnidge@google.com

Review URL: https://codereview.chromium.org//861813003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43021 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-20 19:13:06 +00:00
iposva@google.com 602aad28a1 - Implement Isolate.ping.
- Allow isolate library messages to be enqueued at the beginning
  of the message queue.

R=asiva@google.com

Review URL: https://codereview.chromium.org//749373002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42193 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-08 22:45:10 +00:00
turnidge@google.com c658fa60f9 Fix deadlock that can occur while handling service messages at a breakpoint.
Deadlock looks like:

  Regular Isolate
  -> paused at breakpoint in debug message loop
  -> holds debug message queue lock to get message notifications
  -> handles an service message
  -> waits for portmap lock to send response

  Service Isolate
  -> receives request for paused isolate
  -> holds portmap lock to send message
  -> runs custom message notifier to wake debug message loop
  -> waits for debug message queue lock

I've solved this by releasing the debug message queue lock while
handling service messages.  This requires me to poll for new service
messages after reacquiring the debug message queue lock to make sure I
haven't dropped any notifications.

It's a little weird that the embedder (runtime/bin) needs to be aware
of the locking in the core vm (runtime/vm), but this seemed like the
simplest fix for now.

BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//629533002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41326 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-27 16:57:21 +00:00
turnidge@google.com c48496b873 Refactor isolate startup code in preparation for making isolate spawning more truly non-blocking.
Instead of passing a startup message to the new isolate, pass all
necessary information in to _startIsolate directly.  The new isolate
sends its control port and capabilities back to the parent.

R=iposva@google.com

Review URL: https://codereview.chromium.org//456983002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39423 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-20 19:57:09 +00:00
iposva@google.com 03e8b14ed9 - Address review comments from https://codereview.chromium.org/474913004/
- Clearly mark overrides of ThreadPool::Task::Run as virtual.

Review URL: https://codereview.chromium.org//480343003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39418 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-20 18:37:29 +00:00
iposva@google.com 14ecdbd66a - Separate the thread implementation used in bin/ and vm/
to allow us to make VM specific changes.

R=asiva@google.com

Review URL: https://codereview.chromium.org//463993002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@39172 260f80e4-7a28-3924-810f-c04153c831b5
2014-08-12 23:19:53 +00:00
iposva@google.com 5686b6a793 - Implement Isolate.pause and Isolate.resume.
- Implement a minimum Capability functionality.

R=asiva@google.com

Review URL: https://codereview.chromium.org//354763004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37982 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-03 12:56:02 +00:00
iposva@google.com 8cb7e0797f - Fix style.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//308693003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@36789 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-29 16:07:17 +00:00
johnmccutchan@google.com 9b385ee2d2 Add trace_service_pause_events flag and paused at exit tracing
R=keertip@google.com, turnidge@google.com

Review URL: https://codereview.chromium.org//271893002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35944 260f80e4-7a28-3924-810f-c04153c831b5
2014-05-08 22:02:38 +00:00
iposva@google.com fd8565b071 - Add a minimal implementation of Capability.
- Make RawReceivePort and SendPort VM internal objects.
- Rationalize the creation of ports and their handling within the VM.

R=asiva@google.com

Review URL: https://codereview.chromium.org//243973002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35325 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-23 19:44:03 +00:00
iposva@google.com e78cc1544d - Make ports be less predictable.
- Limit the range of port numbers to 30-bits.
- Parse the ports as 64-bit values when reading from the wire in the debugger protocol.

R=hausner@google.com

Review URL: https://codereview.chromium.org//217693002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34542 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-28 23:39:36 +00:00
kasperl@google.com 0d1c6ddec8 Revert "- Make ports be less predictable."
This reverts r34209 which is causing the x64 VM to hang when
running command-line applications from within the editor.

R=ricow@google.com, iposva@google.com
BUG=http://dartbug.com/17806

Review URL: https://codereview.chromium.org//212723002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34420 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-26 11:38:30 +00:00
iposva@google.com b98c628ee7 - Make ports be less predictable.
R=turnidge@google.com

Review URL: https://codereview.chromium.org//198463007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34209 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-20 21:48:35 +00:00
johnmccutchan@google.com 95b2427f6f Support wedging isolates before startup or before exit.
R=turnidge@google.com

Review URL: https://codereview.chromium.org//204003002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34079 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-18 23:32:36 +00:00
iposva@google.com 1e8061f060 - Remove the reply_port from the VM internal message object.
- Adjust all the uses of this API.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//93873015

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31205 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-17 21:11:18 +00:00
iposva@google.com b3f3d8bfbd - Make sure to keep the main/control port opened until the
isolate is finished.
- Account for the number of opened control ports to be able
  to determine whether there are live ports.
- Fix imports in snapshotted test.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//46173002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29315 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-26 20:50:20 +00:00
jacobr@google.com 605b33c1bc fix cpp11 compile errors
R=asiva@google.com

Review URL: https://codereview.chromium.org//23072026

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26387 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-20 20:24:11 +00:00
ager@google.com 08b1e44502 Reapply "Optimize the message queue for many active ports with few messages."
BUG=

Review URL: https://codereview.chromium.org//11647038

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@16394 260f80e4-7a28-3924-810f-c04153c831b5
2012-12-20 20:03:07 +00:00
ager@google.com c3c47bbc98 Revert "Optimize the message queue for many active ports with few messages."
No failures locally. I'll investigate tomorrow.

R=iposva@google.com
BUG=

Review URL: https://codereview.chromium.org//11642048

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@16392 260f80e4-7a28-3924-810f-c04153c831b5
2012-12-20 19:40:29 +00:00
ager@google.com 6e945a2578 Optimize the message queue for many active ports with few messages.
The current message queue implementation is very inefficient if you are using
many active ports with few messages. This happens when you use 'call' a lot
on ports which is currently done in dart:io.

This patch does not remove messages from the queue when closing a port. Instead
it drops messages for closed ports when it processes them. This dramatically
speeds up dart:io benchmarks that enqueue tons of writes on a file output
stream.

R=iposva@google.com
BUG=http://dartbug.com/6911

Review URL: https://codereview.chromium.org//11440035

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@16388 260f80e4-7a28-3924-810f-c04153c831b5
2012-12-20 19:20:44 +00:00
asiva@google.com f4fc4f8318 Fix some warnings generated when -Wconversion-null is used.
Review URL: https://codereview.chromium.org//11312096

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@14553 260f80e4-7a28-3924-810f-c04153c831b5
2012-11-06 02:58:00 +00:00
cshapiro@google.com da14bf70a7 Add attributions so printf like functions can have their arguments checked.
This change also corrects some misuses of format strings and format
arguments that discovered by the compiler checks.

Review URL: https://chromiumcodereview.appspot.com//10869063

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@11912 260f80e4-7a28-3924-810f-c04153c831b5
2012-09-06 00:58:25 +00:00
turnidge@google.com 9d72035ce5 Use the ThreadPool for all isolates and native ports. Previously,
each isolate or native port had a dedicated thread.

Refactored the MessageHandler api...

- Added a Run function to allow a MessageHandler to run on a
  ThreadPool.  These functions take a start and end callback to allow for
  isolate initialization and shutdown.

- Made the queue private to the MessageHandler and moved all message
  processing code inside the MessageHandler (got rid of all of the
  different flavors of RunLoop).  This helps remove some code
  duplication and hides the details of how messages are handled.

- Moved all locking and notification out of MessageQueue and moved it
  up to MessageHandler.  Moved OOB support out of MessageQueue and up
  to MessageHandler.  These changes make the MessageQueue much
  simpler.

- Refactored native port and isolate MessageHandlers to share more code.

- Improved --trace_isolates output.

- Added tests for MessageHandler.

Refactored lib/isolate code...

- Use the new MessageHandler::Run api.

- Got rid of the LongJump stuff in RunIsolate.  No longer needed.

- Use the new StartIsolateScope/SwitchIsolateScope to make the code
  less verbose and less error-prone.

- Store top-level isolate errors in the sticky_error.

Added StartIsolateScope/SwitchIsolateScope classes.
Review URL: https://chromiumcodereview.appspot.com//9924015

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6762 260f80e4-7a28-3924-810f-c04153c831b5
2012-04-19 19:47:27 +00:00