| Index: lib/isolate.cc
|
| ===================================================================
|
| --- lib/isolate.cc (revision 1955)
|
| +++ lib/isolate.cc (working copy)
|
| @@ -261,21 +261,17 @@
|
| ASSERT(!library.IsNull());
|
| const char* library_url = String::Handle(library.url()).ToCString();
|
| intptr_t port_id = 0;
|
| - const char* error_msg = NULL;
|
| LongJump jump;
|
| bool init_successful = true;
|
| -
|
| - Isolate* spawned_isolate = Dart::CreateIsolate();
|
| - if (spawned_isolate != NULL) {
|
| - // First initialize the spawned isolate.
|
| - LongJump* base = spawned_isolate->long_jump_base();
|
| - spawned_isolate->set_long_jump_base(&jump);
|
| - if (setjmp(*jump.Set()) == 0) {
|
| - Dart::InitializeIsolate(NULL, preserved_isolate->init_callback_data());
|
| - } else {
|
| - init_successful = false;
|
| - }
|
| - spawned_isolate->set_long_jump_base(base);
|
| + Isolate* spawned_isolate = NULL;
|
| + void* callback_data = preserved_isolate->init_callback_data();
|
| + char* error = NULL;
|
| + Dart_IsolateCreateCallback callback = Isolate::CreateCallback();
|
| + if (callback == NULL) {
|
| + error = strdup("Null callback specified for isolate creation\n");
|
| + } else if (callback(callback_data, &error)) {
|
| + spawned_isolate = Isolate::Current();
|
| + ASSERT(spawned_isolate != NULL);
|
| // Check arguments to see if the specified library and classes are
|
| // loaded, this check will throw an exception if they are not loaded.
|
| if (init_successful && CheckArguments(library_url, class_name)) {
|
| @@ -295,29 +291,21 @@
|
| {
|
| Zone zone(spawned_isolate);
|
| HandleScope scope(spawned_isolate);
|
| - const String& error = String::Handle(
|
| + const String& errmsg = String::Handle(
|
| spawned_isolate->object_store()->sticky_error());
|
| - const char* temp_error_msg = error.ToCString();
|
| - intptr_t err_len = strlen(temp_error_msg) + 1;
|
| - Zone* preserved_zone = preserved_isolate->current_zone();
|
| - error_msg = reinterpret_cast<char*>(preserved_zone->Allocate(err_len));
|
| - OS::SNPrint(
|
| - const_cast<char*>(error_msg), err_len, "%s", temp_error_msg);
|
| + error = strdup(errmsg.ToCString());
|
| }
|
| Dart::ShutdownIsolate();
|
| spawned_isolate = NULL;
|
| }
|
| - } else {
|
| - error_msg = "Creation of Isolate failed : ";
|
| }
|
|
|
| // Switch back to the original isolate and return.
|
| Isolate::SetCurrent(preserved_isolate);
|
| if (spawned_isolate == NULL) {
|
| // Unable to spawn isolate correctly, throw exception.
|
| - ASSERT(error_msg != NULL);
|
| ThrowErrorException(Exceptions::kIllegalArgument,
|
| - error_msg,
|
| + error,
|
| library_url,
|
| class_name);
|
| }
|
|
|