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;
|
} pthread_barrierattr_t;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
pthread_barrierattr_t attr;
|
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
pthread_cond_t cond;
|
pthread_cond_t cond;
|
||||||
unsigned target;
|
unsigned target;
|
||||||
|
|||||||
@@ -1242,13 +1242,22 @@ int pthread_barrier_init(pthread_barrier_t* __restrict barrier, const pthread_ba
|
|||||||
if (attr == nullptr)
|
if (attr == nullptr)
|
||||||
attr = &default_attr;
|
attr = &default_attr;
|
||||||
*barrier = {
|
*barrier = {
|
||||||
.attr = *attr,
|
|
||||||
.lock = PTHREAD_MUTEX_INITIALIZER,
|
.lock = PTHREAD_MUTEX_INITIALIZER,
|
||||||
.cond = PTHREAD_COND_INITIALIZER,
|
.cond = PTHREAD_COND_INITIALIZER,
|
||||||
.target = count,
|
.target = count,
|
||||||
.waiting = 0,
|
.waiting = 0,
|
||||||
.generation = 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user