Browse Source

feat: 调整了GcInfo的输出样式

SongZihuan 3 years ago
parent
commit
6da53d6c76
2 changed files with 34 additions and 8 deletions
  1. 7 4
      src/core/env.c
  2. 27 4
      src/core/gc.c

+ 7 - 4
src/core/env.c

@@ -636,14 +636,17 @@ void enableEnvironment(af_Environment *env) {
 }
 
 void freeEnvironment(af_Environment *env) {
-    if (env->core->status != core_creat) {
-        if (!iterDestruct(10, env))
-            printf("iterDestruct Error\n");
-    }
+    bool res = true;
+    if (env->core->status != core_creat)
+        res = iterDestruct(10, env);
+
     freeAllActivity(env->activity);
     freeCore(env);
     freeEnvVarSpace(env->esv);
     freeAllTopMsgProcess(env->process);
+
+    if (!res)
+        printf("iterDestruct Error\n");
     free(env);
 }
 

+ 27 - 4
src/core/gc.c

@@ -414,20 +414,43 @@ void gc_freeAllValue(af_Environment *env) {
 }
 
 void printGCByCode(af_Core *core) {
+    bool success = true;
     printf("GC ObjectData:\n");
-    for (af_ObjectData *od = core->gc_ObjectData; od != NULL; od = od->gc.next)
+    for (af_ObjectData *od = core->gc_ObjectData; od != NULL; od = od->gc.next) {
+        if (od->gc.info.reference != 0) {
+            printf("########## ########## ");
+            success = false;
+        }
         printf("af_ObjectData(%p) Reference: %d\n", od, od->gc.info.reference);
+    }
 
     printf("GC Object:\n");
-    for (af_Object *obj = core->gc_Object; obj != NULL; obj = obj->gc.next)
+    for (af_Object *obj = core->gc_Object; obj != NULL; obj = obj->gc.next) {
+        if (obj->gc.info.reference != 0) {
+            printf("########## ########## ");
+            success = false;
+        }
         printf("af_Object(%p->%p) Reference: %d\n", obj, obj->data, obj->gc.info.reference);
+    }
 
     printf("GC VarSpace:\n");
-    for (af_VarSpace *vs = core->gc_VarSpace; vs != NULL; vs = vs->gc.next)
+    for (af_VarSpace *vs = core->gc_VarSpace; vs != NULL; vs = vs->gc.next) {
+        if (vs->gc.info.reference != 0) {
+            printf("########## ########## ");
+            success = false;
+        }
         printf("af_VarSpace(%p) Reference: %d\n", vs, vs->gc.info.reference);
+    }
 
     printf("GC Var:\n");
-    for (af_Var *var = core->gc_Var; var != NULL; var = var->gc.next)
+    for (af_Var *var = core->gc_Var; var != NULL; var = var->gc.next) {
+        if (var->gc.info.reference != 0) {
+            printf("########## ########## ");
+            success = false;
+        }
         printf("af_Var(%p) Reference: %d\n", var, var->gc.info.reference);
+    }
 
+    if (!success)
+        printf("gc warning.\n");
 }