@@ -17,6 +17,19 @@ extern const uint8_t kDartCoreIsolateSnapshotData[];
17
17
extern const uint8_t kDartCoreIsolateSnapshotInstructions [];
18
18
}
19
19
20
+ namespace {
21
+ class DllIsolateGroupData : public IsolateGroupData {
22
+ public:
23
+ DllIsolateGroupData (const char * url,
24
+ const char * packages_file,
25
+ AppSnapshot* app_snapshot,
26
+ bool isolate_run_app_snapshot)
27
+ : IsolateGroupData(url, packages_file, app_snapshot, isolate_run_app_snapshot) {
28
+ }
29
+
30
+ void * callback_data = {};
31
+ };
32
+ }
20
33
Dart_Handle SetupCoreLibraries (Dart_Isolate isolate,
21
34
IsolateData* isolate_data,
22
35
bool is_isolate_group_start,
@@ -63,8 +76,8 @@ Dart_Isolate CreateKernelIsolate(const char* script_uri,
63
76
intptr_t kernel_service_buffer_size = 0 ;
64
77
dfe.LoadKernelService (&kernel_service_buffer, &kernel_service_buffer_size);
65
78
66
- IsolateGroupData * isolate_group_data =
67
- new IsolateGroupData (uri, package_config, nullptr , false );
79
+ DllIsolateGroupData * isolate_group_data =
80
+ new DllIsolateGroupData (uri, package_config, nullptr , false );
68
81
isolate_group_data->SetKernelBufferUnowned (
69
82
const_cast <uint8_t *>(kernel_service_buffer), kernel_service_buffer_size);
70
83
IsolateData* isolate_data = new IsolateData (isolate_group_data);
@@ -102,8 +115,8 @@ Dart_Isolate CreateVmServiceIsolate(const char* script_uri,
102
115
void * callback_data,
103
116
int service_port,
104
117
char ** error) {
105
- IsolateGroupData * isolate_group_data =
106
- new IsolateGroupData (script_uri, package_config, nullptr , false );
118
+ DllIsolateGroupData * isolate_group_data =
119
+ new DllIsolateGroupData (script_uri, package_config, nullptr , false );
107
120
IsolateData* isolate_data = new IsolateData (isolate_group_data);
108
121
109
122
flags->load_vmservice_library = true ;
@@ -147,10 +160,11 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
147
160
dfe.ReadScript (script_uri, &kernel_buffer, &kernel_buffer_size);
148
161
flags->null_safety = true ;
149
162
150
- IsolateGroupData * isolate_group_data =
151
- new IsolateGroupData (script_uri, packages_config, nullptr , false );
163
+ DllIsolateGroupData * isolate_group_data =
164
+ new DllIsolateGroupData (script_uri, packages_config, nullptr , false );
152
165
isolate_group_data->SetKernelBufferNewlyOwned (kernel_buffer,
153
166
kernel_buffer_size);
167
+ isolate_group_data->callback_data = callback_data;
154
168
155
169
const uint8_t * platform_kernel_buffer = nullptr ;
156
170
intptr_t platform_kernel_buffer_size = 0 ;
@@ -243,3 +257,16 @@ Dart_Isolate CreateIsolate(bool is_main_isolate,
243
257
244
258
return isolate;
245
259
}
260
+
261
+ void * GetCallbackData (void * isolate_data) {
262
+ if (isolate_data == nullptr ) {
263
+ return nullptr ;
264
+ }
265
+ IsolateGroupData* isolate_group_data = static_cast <IsolateData*>(isolate_data)->isolate_group_data ();
266
+
267
+ if (isolate_group_data == nullptr ) {
268
+ return nullptr ;
269
+ }
270
+ void * callback_data = static_cast <DllIsolateGroupData*>(isolate_group_data)->callback_data ;
271
+ return callback_data;
272
+ }
0 commit comments