Răsfoiți Sursa

refactor: Var和ObjectData加入gc

SongZihuan 3 ani în urmă
părinte
comite
5a0c6019bc
2 a modificat fișierele cu 8 adăugiri și 9 ștergeri
  1. 1 1
      src/core/object.c
  2. 7 8
      src/core/var.c

+ 1 - 1
src/core/object.c

@@ -90,7 +90,7 @@ af_Object *makeObject(char *id, bool free_api, af_ObjectAPI *api, bool allow_inh
     }
 
     gc_delReference(od->var_space, env);
-//    gc_delReference(od, env);
+    gc_delReference(od, env);
     return obj;
 }
 

+ 7 - 8
src/core/var.c

@@ -254,7 +254,7 @@ bool addVarToVarSpace(af_Var *var, af_Object *visitor, af_VarSpace *vs, af_Envir
     *pCup = makeVarCup(var);
     pthread_rwlock_unlock(&vs->lock);
     pthread_rwlock_unlock(&var->lock);
-//    gc_delReference(var, env);
+    gc_delReference(var, env);
     return true;
 
 RETURN_FALSE:
@@ -275,7 +275,7 @@ bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_externa
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
     if (addVarToVarSpace(var, visitor, vs, env))
         return true;
-//    gc_delReference(var, env);
+    gc_delReference(var, env);
     return false;
 }
 
@@ -304,7 +304,7 @@ bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_ext
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
     if (addVarToVarSpaceList(var, visitor, vsl, env))
         return true;
-//    gc_delReference(var, env);
+    gc_delReference(var, env);
     return false;
 }
 
@@ -321,15 +321,14 @@ bool makeVarToProtectVarSpace(char *name, char p_self, char p_posterity, char p_
     pthread_rwlock_unlock(&env->protect->lock);
 
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
-    bool re = addVarToVarSpace(var, env->activity->belong,
-                               env->protect, env);
-//    if (!re)
-//        gc_delReference(var, env);
+    bool ret = addVarToVarSpace(var, env->activity->belong, env->protect, env);
+    if (!ret)
+        gc_delReference(var, env);
 
     pthread_rwlock_wrlock(&env->protect->lock);
     env->protect->is_protect = is_protect;
     pthread_rwlock_unlock(&env->protect->lock);
-    return re;
+    return ret;
 }
 
 /*