소스 검색

fixed race condition in gc mark threads

Nicolas Cannasse 2 년 전
부모
커밋
6e754cce62
1개의 변경된 파일2개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 2
      src/gc.c

+ 2 - 2
src/gc.c

@@ -895,8 +895,8 @@ static void mark_thread_main( void *param ) {
 	while( true ) {
 		hl_semaphore_acquire(inf->ready);
 		inf->mark_count += gc_flush_mark(&inf->stack);
-		hl_semaphore_release(mark_threads_done);
-		atomic_bit_unset(&mark_threads_active, 1 << index);
+		while( !atomic_bit_unset(&mark_threads_active, 1 << index) ) {};
+		if( mark_threads_active == 0 ) hl_semaphore_release(mark_threads_done);
 	}
 }