@@ -1341,9 +1341,9 @@ NAPIExceptionStatus NAPIRunScript(NAPIEnv env, const char *utf8Script, const cha
13411341 return NAPIExceptionOK ;
13421342}
13431343
1344- static JSContextGroupRef virtualMachine = NULL ;
1344+ // static JSContextGroupRef virtualMachine = NULL;
13451345
1346- static uint8_t contextCount = 0 ;
1346+ // static uint8_t contextCount = 0;
13471347
13481348NAPICommonStatus NAPIEnableDebugger (__attribute__((unused )) NAPIEnv env ,
13491349 __attribute__((unused )) const char * debuggerTitle ,
@@ -1363,48 +1363,39 @@ NAPICommonStatus NAPISetMessageQueueThread(__attribute__((unused)) NAPIEnv env,
13631363 return NAPICommonOK ;
13641364}
13651365
1366- NAPIErrorStatus NAPICreateEnv ( NAPIEnv * env )
1366+ NAPIErrorStatus NAPICreateRuntime ( NAPIRuntime * runtime )
13671367{
1368- // *env 才是 NAPIEnv
1369- if (!env )
1370- {
1371- return NAPIErrorInvalidArg ;
1372- }
1368+ CHECK_ARG (runtime , Error )
13731369
1374- if ((virtualMachine && !contextCount ) || (!virtualMachine && contextCount ))
1375- {
1376- assert (false);
1370+ * runtime = (NAPIRuntime )JSContextGroupCreate ();
1371+ RETURN_STATUS_IF_FALSE (* runtime , NAPIErrorMemoryError );
13771372
1378- return NAPIErrorGenericFailure ;
1379- }
1373+ return NAPIErrorOK ;
1374+ }
13801375
1381- * env = malloc (sizeof (struct OpaqueNAPIEnv ));
1382- if (!* env )
1383- {
1384- return NAPIErrorMemoryError ;
1385- }
1376+ NAPICommonStatus NAPIFreeRuntime (NAPIRuntime runtime )
1377+ {
1378+ CHECK_ARG (runtime , Common )
13861379
1387- if (!virtualMachine )
1388- {
1389- virtualMachine = JSContextGroupCreate ();
1390- if (!virtualMachine )
1391- {
1392- free (* env );
1380+ JSContextGroupRelease ((JSContextGroupRef )runtime );
13931381
1394- return NAPIErrorMemoryError ;
1395- }
1396- }
1397- JSGlobalContextRef globalContext = JSGlobalContextCreateInGroup (virtualMachine , NULL );
1398- if (!globalContext )
1382+ return NAPICommonOK ;
1383+ }
1384+
1385+ NAPIErrorStatus NAPICreateEnv (NAPIEnv * env , NAPIRuntime runtime )
1386+ {
1387+ CHECK_ARG (env , Error )
1388+
1389+ * env = malloc (sizeof (struct OpaqueNAPIEnv ));
1390+ RETURN_STATUS_IF_FALSE (* env , NAPIErrorMemoryError )
1391+
1392+ (* env )-> context = JSGlobalContextCreateInGroup ((JSContextGroupRef )runtime , NULL );
1393+ if (!(* env )-> context )
13991394 {
14001395 free (* env );
1401- JSContextGroupRelease (virtualMachine );
1402- virtualMachine = NULL ;
14031396
14041397 return NAPIErrorMemoryError ;
14051398 }
1406- contextCount += 1 ;
1407- (* env )-> context = globalContext ;
14081399 (* env )-> lastException = NULL ;
14091400 LIST_INIT (& (* env )-> strongRefList );
14101401 LIST_INIT (& (* env )-> valueList );
@@ -1441,13 +1432,6 @@ NAPICommonStatus NAPIFreeEnv(NAPIEnv env)
14411432 free (ref );
14421433 }
14431434 JSGlobalContextRelease (env -> context );
1444- if (-- contextCount == 0 && virtualMachine )
1445- {
1446- // virtualMachine 不能为 NULL
1447- JSContextGroupRelease (virtualMachine );
1448- virtualMachine = NULL ;
1449- }
1450-
14511435 free (env );
14521436
14531437 return NAPICommonOK ;
0 commit comments