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;
|
||||
|
||||
if ((mp != NULL) && (attr == NULL)) {
|
||||
memset(mp, 0, sizeof(*mp));
|
||||
InitializeCriticalSection(&mp->cs);
|
||||
mp->isLocked = 0;
|
||||
mp->tid = 0;
|
||||
@ -922,6 +923,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) {
|
||||
* attr parameter.
|
||||
*/
|
||||
if ((attr == NULL) && (cond != NULL)) {
|
||||
memset(cond, 0, sizeof(*cond));
|
||||
InitializeCriticalSection(&cond->cs);
|
||||
queue_Init(&cond->waiting_threads);
|
||||
} else {
|
||||
@ -945,6 +947,10 @@ static int waiter_cache_init;
|
||||
static pthread_once_t waiter_cache_once = PTHREAD_ONCE_INIT;
|
||||
|
||||
static void init_waiter_cache(void) {
|
||||
if (waiter_cache_init)
|
||||
return;
|
||||
|
||||
memset(&waiter_cache_cs, 0, sizeof(waiter_cache_cs));
|
||||
InitializeCriticalSection(&waiter_cache_cs);
|
||||
queue_Init(&waiter_cache);
|
||||
waiter_cache_init = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user