Skip to content

Commit 63fd8f6

Browse files
liamappelbecommit-bot@chromium.org
authored andcommitted
Revert "Load isolate from parent's kernel in Isolate.spawn calls."
This reverts commit e143a52. Reason for revert: Broke all the reload-kernel bots. Original change's description: > Load isolate from parent's kernel in Isolate.spawn calls. > > Bug: #6610 > Change-Id: Icd6e1c5d6d4b64b611fc58333c051a8a9a50679d > Reviewed-on: https://dart-review.googlesource.com/c/85724 > Commit-Queue: Liam Appelbe <[email protected]> > Reviewed-by: Vyacheslav Egorov <[email protected]> > Reviewed-by: Ryan Macnak <[email protected]> [email protected],[email protected],[email protected],[email protected] Change-Id: Ie9c305256da9b6478153b99502d0c63b0f43a3e6 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: #6610 Reviewed-on: https://dart-review.googlesource.com/c/86082 Reviewed-by: Liam Appelbe <[email protected]> Commit-Queue: Liam Appelbe <[email protected]>
1 parent 49517fb commit 63fd8f6

File tree

10 files changed

+32
-157
lines changed

10 files changed

+32
-157
lines changed

runtime/bin/isolate_data.cc

+6-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ IsolateData::IsolateData(const char* url,
2121
dependencies_(NULL),
2222
resolved_packages_config_(NULL),
2323
kernel_buffer_(NULL),
24-
kernel_buffer_size_(0) {
24+
kernel_buffer_size_(0),
25+
owns_kernel_buffer_(false) {
2526
if (package_root != NULL) {
2627
ASSERT(packages_file == NULL);
2728
this->package_root = strdup(package_root);
@@ -42,6 +43,10 @@ IsolateData::~IsolateData() {
4243
packages_file = NULL;
4344
free(resolved_packages_config_);
4445
resolved_packages_config_ = NULL;
46+
if (owns_kernel_buffer_) {
47+
ASSERT(kernel_buffer_ != NULL);
48+
free(kernel_buffer_);
49+
}
4550
kernel_buffer_ = NULL;
4651
kernel_buffer_size_ = 0;
4752
delete app_snapshot_;

runtime/bin/isolate_data.h

+7-35
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
#ifndef RUNTIME_BIN_ISOLATE_DATA_H_
66
#define RUNTIME_BIN_ISOLATE_DATA_H_
77

8-
#include <memory>
9-
#include <utility>
10-
118
#include "include/dart_api.h"
129
#include "platform/assert.h"
1310
#include "platform/globals.h"
@@ -43,37 +40,13 @@ class IsolateData {
4340
char* package_root;
4441
char* packages_file;
4542

46-
const std::shared_ptr<uint8_t>& kernel_buffer() const {
47-
return kernel_buffer_;
48-
}
49-
43+
const uint8_t* kernel_buffer() const { return kernel_buffer_; }
5044
intptr_t kernel_buffer_size() const { return kernel_buffer_size_; }
51-
52-
// Associate the given kernel buffer with this IsolateData without giving it
53-
// ownership of the buffer.
54-
void SetKernelBufferUnowned(uint8_t* buffer, intptr_t size) {
55-
ASSERT(kernel_buffer_.get() == NULL);
56-
kernel_buffer_ = std::shared_ptr<uint8_t>(buffer, FreeUnownedKernelBuffer);
57-
kernel_buffer_size_ = size;
58-
}
59-
60-
// Associate the given kernel buffer with this IsolateData and give it
61-
// ownership of the buffer. This IsolateData is the first one to own the
62-
// buffer.
63-
void SetKernelBufferNewlyOwned(uint8_t* buffer, intptr_t size) {
64-
ASSERT(kernel_buffer_.get() == NULL);
65-
kernel_buffer_ = std::shared_ptr<uint8_t>(buffer, free);
66-
kernel_buffer_size_ = size;
67-
}
68-
69-
// Associate the given kernel buffer with this IsolateData and give it
70-
// ownership of the buffer. The buffer is already owned by another
71-
// IsolateData.
72-
void SetKernelBufferAlreadyOwned(std::shared_ptr<uint8_t> buffer,
73-
intptr_t size) {
74-
ASSERT(kernel_buffer_.get() == NULL);
75-
kernel_buffer_ = std::move(buffer);
45+
void set_kernel_buffer(uint8_t* buffer, intptr_t size, bool take_ownership) {
46+
ASSERT(kernel_buffer_ == NULL);
47+
kernel_buffer_ = buffer;
7648
kernel_buffer_size_ = size;
49+
owns_kernel_buffer_ = take_ownership;
7750
}
7851

7952
void UpdatePackagesFile(const char* packages_file_) {
@@ -118,10 +91,9 @@ class IsolateData {
11891
AppSnapshot* app_snapshot_;
11992
MallocGrowableArray<char*>* dependencies_;
12093
char* resolved_packages_config_;
121-
std::shared_ptr<uint8_t> kernel_buffer_;
94+
uint8_t* kernel_buffer_;
12295
intptr_t kernel_buffer_size_;
123-
124-
static void FreeUnownedKernelBuffer(uint8_t*) {}
96+
bool owns_kernel_buffer_;
12597

12698
DISALLOW_COPY_AND_ASSIGN(IsolateData);
12799
};

runtime/bin/main.cc

+14-31
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include <stdio.h>
66
#include <stdlib.h>
77
#include <string.h>
8-
#include <memory>
98

109
#include "include/bin/dart_io_api.h"
1110
#include "include/dart_api.h"
@@ -214,7 +213,7 @@ static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate,
214213
#if !defined(DART_PRECOMPILED_RUNTIME)
215214
IsolateData* isolate_data =
216215
reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate));
217-
const uint8_t* kernel_buffer = isolate_data->kernel_buffer().get();
216+
const uint8_t* kernel_buffer = isolate_data->kernel_buffer();
218217
intptr_t kernel_buffer_size = isolate_data->kernel_buffer_size();
219218
#endif
220219

@@ -275,8 +274,9 @@ static Dart_Isolate IsolateSetupHelper(Dart_Isolate isolate,
275274
Dart_ShutdownIsolate();
276275
return NULL;
277276
}
278-
isolate_data->SetKernelBufferNewlyOwned(application_kernel_buffer,
279-
application_kernel_buffer_size);
277+
isolate_data->set_kernel_buffer(application_kernel_buffer,
278+
application_kernel_buffer_size,
279+
true /*take ownership*/);
280280
kernel_buffer = application_kernel_buffer;
281281
kernel_buffer_size = application_kernel_buffer_size;
282282
}
@@ -433,9 +433,9 @@ static Dart_Isolate CreateAndSetupKernelIsolate(const char* script_uri,
433433
dfe.LoadKernelService(&kernel_service_buffer, &kernel_service_buffer_size);
434434
ASSERT(kernel_service_buffer != NULL);
435435
isolate_data = new IsolateData(uri, package_root, packages_config, NULL);
436-
isolate_data->SetKernelBufferUnowned(
437-
const_cast<uint8_t*>(kernel_service_buffer),
438-
kernel_service_buffer_size);
436+
isolate_data->set_kernel_buffer(const_cast<uint8_t*>(kernel_service_buffer),
437+
kernel_service_buffer_size,
438+
false /* take_ownership */);
439439
isolate = Dart_CreateIsolateFromKernel(
440440
DART_KERNEL_ISOLATE_NAME, main, kernel_service_buffer,
441441
kernel_service_buffer_size, flags, isolate_data, error);
@@ -527,13 +527,11 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate,
527527
const char* package_root,
528528
const char* packages_config,
529529
Dart_IsolateFlags* flags,
530-
void* callback_data,
531530
char** error,
532531
int* exit_code) {
533532
int64_t start = Dart_TimelineGetMicros();
534533
ASSERT(script_uri != NULL);
535534
uint8_t* kernel_buffer = NULL;
536-
std::shared_ptr<uint8_t> parent_kernel_buffer;
537535
intptr_t kernel_buffer_size = 0;
538536
AppSnapshot* app_snapshot = NULL;
539537

@@ -567,30 +565,16 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate,
567565
&isolate_snapshot_data, &isolate_snapshot_instructions);
568566
}
569567
}
570-
571-
if (flags->copy_parent_code && callback_data) {
572-
IsolateData* parent_isolate_data =
573-
reinterpret_cast<IsolateData*>(callback_data);
574-
parent_kernel_buffer = parent_isolate_data->kernel_buffer();
575-
kernel_buffer = parent_kernel_buffer.get();
576-
kernel_buffer_size = parent_isolate_data->kernel_buffer_size();
577-
}
578-
579-
if (kernel_buffer == NULL && !isolate_run_app_snapshot) {
568+
if (!isolate_run_app_snapshot) {
580569
dfe.ReadScript(script_uri, &kernel_buffer, &kernel_buffer_size);
581570
}
582571
#endif // !defined(DART_PRECOMPILED_RUNTIME)
583572

584573
IsolateData* isolate_data =
585574
new IsolateData(script_uri, package_root, packages_config, app_snapshot);
586575
if (kernel_buffer != NULL) {
587-
if (parent_kernel_buffer) {
588-
isolate_data->SetKernelBufferAlreadyOwned(std::move(parent_kernel_buffer),
589-
kernel_buffer_size);
590-
} else {
591-
isolate_data->SetKernelBufferNewlyOwned(kernel_buffer,
592-
kernel_buffer_size);
593-
}
576+
isolate_data->set_kernel_buffer(kernel_buffer, kernel_buffer_size,
577+
true /*take ownership*/);
594578
}
595579
if (is_main_isolate && (Options::depfile() != NULL)) {
596580
isolate_data->set_dependencies(new MallocGrowableArray<char*>());
@@ -656,7 +640,7 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
656640
const char* package_root,
657641
const char* package_config,
658642
Dart_IsolateFlags* flags,
659-
void* callback_data,
643+
void* data,
660644
char** error) {
661645
// The VM should never call the isolate helper with a NULL flags.
662646
ASSERT(flags != NULL);
@@ -683,8 +667,8 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
683667
}
684668
bool is_main_isolate = false;
685669
return CreateIsolateAndSetupHelper(is_main_isolate, script_uri, main,
686-
package_root, package_config, flags,
687-
callback_data, error, &exit_code);
670+
package_root, package_config, flags, error,
671+
&exit_code);
688672
}
689673

690674
char* BuildIsolateName(const char* script_name, const char* func_name) {
@@ -818,8 +802,7 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) {
818802

819803
Dart_Isolate isolate = CreateIsolateAndSetupHelper(
820804
is_main_isolate, script_name, "main", Options::package_root(),
821-
Options::packages_file(), &flags, NULL /* callback_data */, &error,
822-
&exit_code);
805+
Options::packages_file(), &flags, &error, &exit_code);
823806

824807
if (isolate == NULL) {
825808
delete[] isolate_name;

runtime/bin/run_vm_tests.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
166166
ASSERT(kernel_service_buffer != NULL);
167167
isolate_data =
168168
new bin::IsolateData(script_uri, package_root, packages_config, NULL);
169-
isolate_data->SetKernelBufferUnowned(
170-
const_cast<uint8_t*>(kernel_service_buffer),
171-
kernel_service_buffer_size);
169+
isolate_data->set_kernel_buffer(const_cast<uint8_t*>(kernel_service_buffer),
170+
kernel_service_buffer_size,
171+
false /* take_ownership */);
172172
isolate = Dart_CreateIsolateFromKernel(
173173
script_uri, main, kernel_service_buffer, kernel_service_buffer_size,
174174
flags, isolate_data, error);

runtime/include/dart_api.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ typedef struct {
553553
* for each part.
554554
*/
555555

556-
#define DART_FLAGS_CURRENT_VERSION (0x0000000b)
556+
#define DART_FLAGS_CURRENT_VERSION (0x0000000a)
557557

558558
typedef struct {
559559
int32_t version;
@@ -564,7 +564,6 @@ typedef struct {
564564
Dart_QualifiedFunctionName* entry_points;
565565
bool load_vmservice_library;
566566
bool unsafe_trust_strong_mode_types;
567-
bool copy_parent_code;
568567
} Dart_IsolateFlags;
569568

570569
/**

runtime/lib/isolate.cc

-7
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,6 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 10) {
230230
isolate->spawn_count_monitor(), isolate->spawn_count(),
231231
utf8_package_root, utf8_package_config, paused.value(), fatal_errors,
232232
on_exit_port, on_error_port);
233-
234-
// Since this is a call to Isolate.spawn, copy the parent isolate's code.
235-
state->isolate_flags()->copy_parent_code = true;
236-
237233
ThreadPool::Task* spawn_task = new SpawnIsolateTask(state);
238234

239235
isolate->IncrementSpawnCount();
@@ -361,9 +357,6 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 12) {
361357
flags->enable_asserts = checked.value();
362358
}
363359

364-
// Since this is a call to Isolate.spawnUri, don't copy the parent's code.
365-
state->isolate_flags()->copy_parent_code = false;
366-
367360
ThreadPool::Task* spawn_task = new SpawnIsolateTask(state);
368361

369362
isolate->IncrementSpawnCount();

runtime/vm/isolate.cc

-2
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,6 @@ void Isolate::FlagsInitialize(Dart_IsolateFlags* api_flags) {
779779
#undef INIT_FROM_FLAG
780780
api_flags->entry_points = NULL;
781781
api_flags->load_vmservice_library = false;
782-
api_flags->copy_parent_code = false;
783782
}
784783

785784
void Isolate::FlagsCopyTo(Dart_IsolateFlags* api_flags) const {
@@ -790,7 +789,6 @@ void Isolate::FlagsCopyTo(Dart_IsolateFlags* api_flags) const {
790789
#undef INIT_FROM_FIELD
791790
api_flags->entry_points = NULL;
792791
api_flags->load_vmservice_library = should_load_vmservice();
793-
api_flags->copy_parent_code = false;
794792
}
795793

796794
void Isolate::FlagsCopyFrom(const Dart_IsolateFlags& api_flags) {

runtime/vm/isolate.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ typedef FixedCache<intptr_t, CatchEntryMovesRefPtr, 16> CatchEntryMovesCache;
133133
// List of Isolate flags with corresponding members of Dart_IsolateFlags and
134134
// corresponding global command line flags.
135135
//
136-
// V(when, name, bit-name, Dart_IsolateFlags-name, command-line-flag-name)
136+
// V(when, name, Dart_IsolateFlags-member-name, command-line-flag-name)
137137
//
138138
#define ISOLATE_FLAG_LIST(V) \
139139
V(NONPRODUCT, asserts, EnableAsserts, enable_asserts, FLAG_enable_asserts) \

tests/lib_2/isolate/issue_6610_test.dart

-74
This file was deleted.

tests/lib_2/lib_2.status

-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ isolate/isolate_complex_messages_test: Skip # Isolate.spawnUri
212212
isolate/issue_21398_parent_isolate1_test: Skip # Isolate.spawnUri
213213
isolate/issue_21398_parent_isolate_test: Skip # Isolate.spawnUri
214214
isolate/issue_24243_parent_isolate_test: Skip # Isolate.spawnUri
215-
isolate/issue_6610_test: Skip # Isolate.spawnUri
216215
isolate/mandel_isolate_test: Skip # Isolate.spawnUri
217216
isolate/message2_test: Skip # Isolate.spawnUri
218217
isolate/message_test: Skip # Isolate.spawnUri

0 commit comments

Comments
 (0)