Преглед на файлове

fix: GC_FREE_EXCHANGE使用互斥锁

SongZihuan преди 3 години
родител
ревизия
7ee57e252b
променени са 1 файла, в които са добавени 3 реда и са изтрити 1 реда
  1. 3 1
      src/core/__gc.h

+ 3 - 1
src/core/__gc.h

@@ -12,9 +12,11 @@ typedef struct gc_Analyzed gc_Analyzed, **pgc_Analyzed;
 typedef struct gc_Factory gc_Factory;
 
 #define GC_FREE_EXCHANGE(obj, Type, Env) do { \
+pthread_mutex_lock(&(Env)->gc_factory->mutex); \
 {if ((obj)->gc.prev != NULL) {(obj)->gc.prev->gc.next = (obj)->gc.next;} \
  else {(Env)->gc_factory->gc_##Type = (obj)->gc.next;}} \
-{if ((obj)->gc.next != NULL) {(obj)->gc.next->gc.prev = (obj)->gc.prev;}}} while(0)
+{if ((obj)->gc.next != NULL) {(obj)->gc.next->gc.prev = (obj)->gc.prev;}} \
+pthread_mutex_unlock(&(Env)->gc_factory->mutex);} while(0)
 
 #define GC_CHAIN(type) struct type *next, *prev
 typedef uint32_t GcCount;