소스 검색

barrier destroy must also wait for threads in other processes exiting barrier

the vm lock only waits for threads in the same process exiting.
actually this fix is not enough, but it's a start...
Rich Felker 13 년 전
부모
커밋
8f4a115e7d
1개의 변경된 파일2개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      src/thread/pthread_barrier_destroy.c

+ 2 - 0
src/thread/pthread_barrier_destroy.c

@@ -5,6 +5,8 @@ void __vm_lock(int), __vm_unlock(void);
 int pthread_barrier_destroy(pthread_barrier_t *b)
 {
 	if (b->_b_limit < 0) {
+		int seq = b->_b_seq;
+		if (seq & 1) __wait(&b->_b_seq, 0, seq, 0);
 		__vm_lock(-1);
 		__vm_unlock();
 	}