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

Unified Diff: runtime/vm/isolate.cc

Issue 1244733002: - Implement VM parts of https://codereview.chromium.org/1240743003/ (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Update isolate.status file as expected. Created 5 years, 5 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
« no previous file with comments | « runtime/vm/isolate.h ('k') | tests/isolate/error_at_spawn_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/isolate.cc
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index ec61d1adf6aef53be3019ebb2a4703def9fc2bac..6c8d73f098d1ed2e1d59b605cc132ce72a73429a 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1232,6 +1232,24 @@ static bool RunIsolate(uword parameter) {
StartIsolateScope start_scope(isolate);
StackZone zone(isolate);
HandleScope handle_scope(isolate);
+
+ // If particular values were requested for this newly spawned isolate, then
+ // they are set here before the isolate starts executing user code.
+ isolate->SetErrorsFatal(state->errors_are_fatal());
+ if (state->on_exit_port() != ILLEGAL_PORT) {
+ const SendPort& listener =
+ SendPort::Handle(SendPort::New(state->on_exit_port()));
+ isolate->AddExitListener(listener, Instance::null_instance());
+ }
+ if (state->on_error_port() != ILLEGAL_PORT) {
+ const SendPort& listener =
+ SendPort::Handle(SendPort::New(state->on_error_port()));
+ isolate->AddErrorListener(listener);
+ }
+
+ // Switch back to spawning isolate.
+
+
if (!ClassFinalizer::ProcessPendingClasses()) {
// Error is in sticky error already.
return false;
@@ -1952,9 +1970,14 @@ static RawInstance* DeserializeObject(Isolate* isolate,
IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
const Function& func,
const Instance& message,
- bool paused)
+ bool paused,
+ bool errors_are_fatal,
+ Dart_Port on_exit_port,
+ Dart_Port on_error_port)
: isolate_(NULL),
parent_port_(parent_port),
+ on_exit_port_(on_exit_port),
+ on_error_port_(on_error_port),
script_url_(NULL),
package_root_(NULL),
library_url_(NULL),
@@ -1965,7 +1988,8 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
serialized_message_(NULL),
serialized_message_len_(0),
isolate_flags_(),
- paused_(paused) {
+ paused_(paused),
+ errors_are_fatal_(errors_are_fatal) {
script_url_ = NULL;
const Class& cls = Class::Handle(func.Owner());
const Library& lib = Library::Handle(cls.library());
@@ -1993,9 +2017,14 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
const char* package_root,
const Instance& args,
const Instance& message,
- bool paused)
+ bool paused,
+ bool errors_are_fatal,
+ Dart_Port on_exit_port,
+ Dart_Port on_error_port)
: isolate_(NULL),
parent_port_(parent_port),
+ on_exit_port_(on_exit_port),
+ on_error_port_(on_error_port),
package_root_(NULL),
library_url_(NULL),
class_name_(NULL),
@@ -2005,7 +2034,8 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
serialized_message_(NULL),
serialized_message_len_(0),
isolate_flags_(),
- paused_(paused) {
+ paused_(paused),
+ errors_are_fatal_(errors_are_fatal) {
script_url_ = strdup(script_url);
if (package_root != NULL) {
package_root_ = strdup(package_root);
« no previous file with comments | « runtime/vm/isolate.h ('k') | tests/isolate/error_at_spawn_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698