Browse Source

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 years ago
parent
commit
8f4a115e7d
1 changed files with 2 additions and 0 deletions
  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)
 int pthread_barrier_destroy(pthread_barrier_t *b)
 {
 {
 	if (b->_b_limit < 0) {
 	if (b->_b_limit < 0) {
+		int seq = b->_b_seq;
+		if (seq & 1) __wait(&b->_b_seq, 0, seq, 0);
 		__vm_lock(-1);
 		__vm_lock(-1);
 		__vm_unlock();
 		__vm_unlock();
 	}
 	}