|
@@ -6,7 +6,7 @@
|
|
struct EnvCode {
|
|
struct EnvCode {
|
|
af_Environment *env;
|
|
af_Environment *env;
|
|
af_Code *code;
|
|
af_Code *code;
|
|
- bool free_code;
|
|
|
|
|
|
+ bool not_copy_code;
|
|
};
|
|
};
|
|
|
|
|
|
static void *runThread(void *ec);
|
|
static void *runThread(void *ec);
|
|
@@ -18,7 +18,7 @@ static void *runThread(void *ec);
|
|
* @param vs 压入的变量空间
|
|
* @param vs 压入的变量空间
|
|
* @param code 执行的代码
|
|
* @param code 执行的代码
|
|
*/
|
|
*/
|
|
-af_Environment *startRunThread(af_Environment *env, af_VarSpace *vs, af_Code *code, bool free_code, bool derive_tmp,
|
|
|
|
|
|
+af_Environment *startRunThread(af_Environment *env, af_VarSpace *vs, af_Code *code, bool not_copy_code, bool derive_tmp,
|
|
bool derive_guardian, bool derive_lr, bool enable){
|
|
bool derive_guardian, bool derive_lr, bool enable){
|
|
af_Environment *base = env->base;
|
|
af_Environment *base = env->base;
|
|
af_Environment *new = deriveEnvironment(derive_tmp, derive_guardian, derive_lr, enable, base);
|
|
af_Environment *new = deriveEnvironment(derive_tmp, derive_guardian, derive_lr, enable, base);
|
|
@@ -34,16 +34,16 @@ af_Environment *startRunThread(af_Environment *env, af_VarSpace *vs, af_Code *co
|
|
gc_delReference(vs, base);
|
|
gc_delReference(vs, base);
|
|
|
|
|
|
if (enable) // 如果未Enable, 则暂时不启动线程
|
|
if (enable) // 如果未Enable, 则暂时不启动线程
|
|
- startRunThread_(new, code, free_code);
|
|
|
|
|
|
+ startRunThread_(new, code, not_copy_code);
|
|
return new;
|
|
return new;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-void startRunThread_(af_Environment *env, af_Code *code, bool free_code){
|
|
|
|
|
|
+void startRunThread_(af_Environment *env, af_Code *code, bool not_copy_code){
|
|
struct EnvCode *ec = calloc(1, sizeof(struct EnvCode));
|
|
struct EnvCode *ec = calloc(1, sizeof(struct EnvCode));
|
|
ec->env = env;
|
|
ec->env = env;
|
|
ec->code = code;
|
|
ec->code = code;
|
|
- ec->free_code = free_code;
|
|
|
|
|
|
+ ec->not_copy_code = not_copy_code;
|
|
|
|
|
|
pthread_t id;
|
|
pthread_t id;
|
|
pthread_create(&id, NULL, runThread, ec);
|
|
pthread_create(&id, NULL, runThread, ec);
|
|
@@ -54,17 +54,18 @@ void startRunThread_(af_Environment *env, af_Code *code, bool free_code){
|
|
static void *runThread(void *ec) {
|
|
static void *runThread(void *ec) {
|
|
af_Environment *env = ((struct EnvCode *)ec)->env;
|
|
af_Environment *env = ((struct EnvCode *)ec)->env;
|
|
af_Code *code = ((struct EnvCode *)ec)->code;
|
|
af_Code *code = ((struct EnvCode *)ec)->code;
|
|
- bool free_code = ((struct EnvCode *)ec)->free_code;
|
|
|
|
|
|
+ bool not_copy_code = ((struct EnvCode *)ec)->not_copy_code;
|
|
free(ec);
|
|
free(ec);
|
|
|
|
|
|
|
|
+ if (!not_copy_code) // “非-不要复制代码” 即 “要复制代码”
|
|
|
|
+ code = copyCode(code);
|
|
|
|
+
|
|
writeInfoLog(aFunCoreLogger, "Thread start");
|
|
writeInfoLog(aFunCoreLogger, "Thread start");
|
|
iterCode(code, 0, env);
|
|
iterCode(code, 0, env);
|
|
|
|
|
|
writeInfoLog(aFunCoreLogger, "Thread free");
|
|
writeInfoLog(aFunCoreLogger, "Thread free");
|
|
freeEnvironment(env);
|
|
freeEnvironment(env);
|
|
-
|
|
|
|
- if (free_code)
|
|
|
|
- freeAllCode(code);
|
|
|
|
|
|
+ freeAllCode(code);
|
|
|
|
|
|
writeInfoLog(aFunCoreLogger, "Thread end");
|
|
writeInfoLog(aFunCoreLogger, "Thread end");
|
|
return NULL;
|
|
return NULL;
|