mirror of
https://git.openafs.org/openafs.git
synced 2025-01-21 00:10:15 +00:00
Windows: correct pthread_xxx_init semantics
pthread lock and conditional initialization semantics do not require that the lock structure be zeroed before pthread_xxxx_init() functions are called. Since the Windows CriticalSection initialization does require that the memory be zeroed, the pthread_xxxx_init() functions must zero the memory just in case before performing the CriticalSection initialization. Change-Id: I61e78ca7cbc10f7d4144b8efcbb38f67bb8fd695 Reviewed-on: http://gerrit.openafs.org/3904 Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: BuildBot <buildbot@rampaginggeek.com> Tested-by: Jeffrey Altman <jaltman@openafs.org> Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
This commit is contained in:
parent
380cc22a45
commit
ae11ef7898
@ -77,6 +77,7 @@ int pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *attr) {
|
|||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
if ((mp != NULL) && (attr == NULL)) {
|
if ((mp != NULL) && (attr == NULL)) {
|
||||||
|
memset(mp, 0, sizeof(*mp));
|
||||||
InitializeCriticalSection(&mp->cs);
|
InitializeCriticalSection(&mp->cs);
|
||||||
mp->isLocked = 0;
|
mp->isLocked = 0;
|
||||||
mp->tid = 0;
|
mp->tid = 0;
|
||||||
@ -922,6 +923,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) {
|
|||||||
* attr parameter.
|
* attr parameter.
|
||||||
*/
|
*/
|
||||||
if ((attr == NULL) && (cond != NULL)) {
|
if ((attr == NULL) && (cond != NULL)) {
|
||||||
|
memset(cond, 0, sizeof(*cond));
|
||||||
InitializeCriticalSection(&cond->cs);
|
InitializeCriticalSection(&cond->cs);
|
||||||
queue_Init(&cond->waiting_threads);
|
queue_Init(&cond->waiting_threads);
|
||||||
} else {
|
} else {
|
||||||
@ -945,6 +947,10 @@ static int waiter_cache_init;
|
|||||||
static pthread_once_t waiter_cache_once = PTHREAD_ONCE_INIT;
|
static pthread_once_t waiter_cache_once = PTHREAD_ONCE_INIT;
|
||||||
|
|
||||||
static void init_waiter_cache(void) {
|
static void init_waiter_cache(void) {
|
||||||
|
if (waiter_cache_init)
|
||||||
|
return;
|
||||||
|
|
||||||
|
memset(&waiter_cache_cs, 0, sizeof(waiter_cache_cs));
|
||||||
InitializeCriticalSection(&waiter_cache_cs);
|
InitializeCriticalSection(&waiter_cache_cs);
|
||||||
queue_Init(&waiter_cache);
|
queue_Init(&waiter_cache);
|
||||||
waiter_cache_init = 1;
|
waiter_cache_init = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user