| Index: runtime/vm/isolate.cc
|
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
|
| index f84b00ad1c6403f815c4b9702b89e9f5431318ec..226a46a512aa100fec9f331dd856eb550d340a49 100644
|
| --- a/runtime/vm/isolate.cc
|
| +++ b/runtime/vm/isolate.cc
|
| @@ -2406,6 +2406,14 @@ static RawInstance* DeserializeObject(Thread* thread,
|
| }
|
|
|
|
|
| +static const char* NewConstChar(const char* chars) {
|
| + size_t len = strlen(chars);
|
| + char* mem = new char[len + 1];
|
| + memmove(mem, chars, len + 1);
|
| + return mem;
|
| +}
|
| +
|
| +
|
| IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| const Function& func,
|
| const Instance& message,
|
| @@ -2419,6 +2427,7 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| on_error_port_(on_error_port),
|
| script_url_(NULL),
|
| package_root_(NULL),
|
| + package_map_(NULL),
|
| library_url_(NULL),
|
| class_name_(NULL),
|
| function_name_(NULL),
|
| @@ -2429,17 +2438,16 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| isolate_flags_(),
|
| 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());
|
| const String& lib_url = String::Handle(lib.url());
|
| - library_url_ = strdup(lib_url.ToCString());
|
| + library_url_ = NewConstChar(lib_url.ToCString());
|
|
|
| const String& func_name = String::Handle(func.name());
|
| - function_name_ = strdup(func_name.ToCString());
|
| + function_name_ = NewConstChar(func_name.ToCString());
|
| if (!cls.IsTopLevel()) {
|
| const String& class_name = String::Handle(cls.Name());
|
| - class_name_ = strdup(class_name.ToCString());
|
| + class_name_ = NewConstChar(class_name.ToCString());
|
| }
|
| bool can_send_any_object = true;
|
| SerializeObject(message,
|
| @@ -2454,6 +2462,7 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| const char* script_url,
|
| const char* package_root,
|
| + const char** package_map,
|
| const Instance& args,
|
| const Instance& message,
|
| bool paused,
|
| @@ -2464,7 +2473,9 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| parent_port_(parent_port),
|
| on_exit_port_(on_exit_port),
|
| on_error_port_(on_error_port),
|
| - package_root_(NULL),
|
| + script_url_(script_url),
|
| + package_root_(package_root),
|
| + package_map_(package_map),
|
| library_url_(NULL),
|
| class_name_(NULL),
|
| function_name_(NULL),
|
| @@ -2475,12 +2486,7 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
| isolate_flags_(),
|
| paused_(paused),
|
| errors_are_fatal_(errors_are_fatal) {
|
| - script_url_ = strdup(script_url);
|
| - if (package_root != NULL) {
|
| - package_root_ = strdup(package_root);
|
| - }
|
| - library_url_ = NULL;
|
| - function_name_ = strdup("main");
|
| + function_name_ = NewConstChar("main");
|
| bool can_send_any_object = false;
|
| SerializeObject(args,
|
| &serialized_args_,
|
| @@ -2497,11 +2503,19 @@ IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
|
|
|
|
|
| IsolateSpawnState::~IsolateSpawnState() {
|
| - free(script_url_);
|
| - free(package_root_);
|
| - free(library_url_);
|
| - free(function_name_);
|
| - free(class_name_);
|
| + delete script_url_;
|
| + delete package_root_;
|
| + for (int i = 0; package_map_ != NULL; i++) {
|
| + if (package_map_[i] != NULL) {
|
| + delete package_map_[i];
|
| + } else {
|
| + delete package_map_;
|
| + package_map_ = NULL;
|
| + }
|
| + }
|
| + delete library_url_;
|
| + delete class_name_;
|
| + delete function_name_;
|
| free(serialized_args_);
|
| free(serialized_message_);
|
| }
|
|
|