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...
This commit is contained in:
Rich Felker 2011-09-28 12:47:15 -04:00
parent f0a8d60d32
commit 8f4a115e7d
1 changed files with 2 additions and 0 deletions

View File

@ -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();
}