LibC: Fix shared pthread_barrier init
Initialize internal lock and cond as shared when the barrier is shared
This commit is contained in:
@@ -54,7 +54,6 @@ typedef struct
|
||||
} pthread_barrierattr_t;
|
||||
typedef struct
|
||||
{
|
||||
pthread_barrierattr_t attr;
|
||||
pthread_mutex_t lock;
|
||||
pthread_cond_t cond;
|
||||
unsigned target;
|
||||
|
||||
@@ -1242,13 +1242,22 @@ int pthread_barrier_init(pthread_barrier_t* __restrict barrier, const pthread_ba
|
||||
if (attr == nullptr)
|
||||
attr = &default_attr;
|
||||
*barrier = {
|
||||
.attr = *attr,
|
||||
.lock = PTHREAD_MUTEX_INITIALIZER,
|
||||
.cond = PTHREAD_COND_INITIALIZER,
|
||||
.target = count,
|
||||
.waiting = 0,
|
||||
.generation = 0,
|
||||
};
|
||||
const pthread_mutexattr_t mattr {
|
||||
.type = PTHREAD_MUTEX_DEFAULT,
|
||||
.shared = attr->shared,
|
||||
};
|
||||
pthread_mutex_init(&barrier->lock, &mattr);
|
||||
const pthread_condattr_t cattr {
|
||||
.clock = CLOCK_REALTIME,
|
||||
.shared = attr->shared,
|
||||
};
|
||||
pthread_cond_init(&barrier->cond, &cattr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user