Explorar o código

GC add get_mark_threads that allow manipulation of marking threads. (#615)

Yuxiao Mao %!s(int64=2) %!d(string=hai) anos
pai
achega
6377991c63
Modificáronse 1 ficheiros con 11 adicións e 1 borrados
  1. 11 1
      src/gc.c

+ 11 - 1
src/gc.c

@@ -569,6 +569,7 @@ typedef struct {
 	gc_mstack stack;
 	hl_semaphore *ready;
 	int mark_count;
+	hl_thread *tid;
 } gc_mthread;
 
 static float gc_mark_threshold = 0.2f;
@@ -911,6 +912,15 @@ static void mark_thread_main( void *param ) {
 	}
 }
 
+int gc_get_mark_threads( hl_thread **tids ) {
+	if (gc_mark_threads <= 1)
+		return 0;
+	for (int i = 0; i < gc_mark_threads; i++) {
+		tids[i] = mark_threads[i].tid;
+	}
+	return gc_mark_threads;
+}
+
 static void hl_gc_init() {
 	int i;
 	for(i=0;i<1<<GC_LEVEL0_BITS;i++)
@@ -942,7 +952,7 @@ static void hl_gc_init() {
 			gc_mthread *t = &mark_threads[i];
 			hl_add_root(&t->ready);
 			t->ready = hl_semaphore_alloc(0);
-			hl_thread_start(mark_thread_main, (void*)(int_val)i, false);
+			t->tid = hl_thread_start(mark_thread_main, (void*)(int_val)i, false);
 		}
 	}
 #	endif