From 771465fed0cf50ee2dd790723245fc091699c324 Mon Sep 17 00:00:00 2001 From: rpj Date: Mon, 17 May 2004 01:38:02 +0000 Subject: re-indentation, bug fixes, hooks for pre-emptive async cancelation --- pthread_mutex_lock.c | 103 +++++++-------------------------------------------- 1 file changed, 14 insertions(+), 89 deletions(-) (limited to 'pthread_mutex_lock.c') diff --git a/pthread_mutex_lock.c b/pthread_mutex_lock.c index ceeeb30..a59666a 100644 --- a/pthread_mutex_lock.c +++ b/pthread_mutex_lock.c @@ -35,88 +35,13 @@ */ #ifndef _UWIN -# include +//# include #endif #include "pthread.h" #include "implement.h" - -static INLINE int -ptw32_semwait (sem_t * sem) - /* - * ------------------------------------------------------ - * DESCRIPTION - * This function waits on a POSIX semaphore. If the - * semaphore value is greater than zero, it decreases - * its value by one. If the semaphore value is zero, then - * the calling thread (or process) is blocked until it can - * successfully decrease the value. - * - * Unlike sem_wait(), this routine is non-cancelable. - * - * RESULTS - * 0 successfully decreased semaphore, - * -1 failed, error in errno. - * ERRNO - * EINVAL 'sem' is not a valid semaphore, - * ENOSYS semaphores are not supported, - * EINTR the function was interrupted by a signal, - * EDEADLK a deadlock condition was detected. - * - * ------------------------------------------------------ - */ -{ - int result = 0; - - DWORD status; - - if (sem == NULL) - { - result = EINVAL; - } - else - { - -#ifdef NEED_SEM - - status = WaitForSingleObject( (*sem)->event, INFINITE ); - -#else /* NEED_SEM */ - - status = WaitForSingleObject( (*sem)->sem, INFINITE ); - -#endif - - if (status == WAIT_OBJECT_0) - { - -#ifdef NEED_SEM - - ptw32_decrease_semaphore(sem); - -#endif /* NEED_SEM */ - - return 0; - } - else - { - result = EINVAL; - } - } - - if (result != 0) - { - errno = result; - return -1; - } - - return 0; - -} /* ptw32_semwait */ - - int -pthread_mutex_lock(pthread_mutex_t *mutex) +pthread_mutex_lock (pthread_mutex_t * mutex) { int result = 0; pthread_mutex_t mx; @@ -135,29 +60,29 @@ pthread_mutex_lock(pthread_mutex_t *mutex) */ if (*mutex == PTHREAD_MUTEX_INITIALIZER) { - if ((result = ptw32_mutex_check_need_init(mutex)) != 0) + if ((result = ptw32_mutex_check_need_init (mutex)) != 0) { - return(result); + return (result); } } mx = *mutex; - if ( 0 == InterlockedIncrement( &mx->lock_idx ) ) + if (0 == InterlockedIncrement (&mx->lock_idx)) { mx->recursive_count = 1; mx->ownerThread = (mx->kind != PTHREAD_MUTEX_FAST_NP - ? pthread_self() + ? pthread_self () : (pthread_t) PTW32_MUTEX_OWNER_ANONYMOUS); } else { - if ( mx->kind != PTHREAD_MUTEX_FAST_NP && - pthread_equal( mx->ownerThread, pthread_self() ) ) + if (mx->kind != PTHREAD_MUTEX_FAST_NP && + pthread_equal (mx->ownerThread, pthread_self ())) { - (void) InterlockedDecrement( &mx->lock_idx ); - - if( mx->kind == PTHREAD_MUTEX_RECURSIVE_NP ) + (void) InterlockedDecrement (&mx->lock_idx); + + if (mx->kind == PTHREAD_MUTEX_RECURSIVE_NP) { mx->recursive_count++; } @@ -168,11 +93,11 @@ pthread_mutex_lock(pthread_mutex_t *mutex) } else { - if (ptw32_semwait( &mx->wait_sema ) == 0) + if (ptw32_semwait (&mx->wait_sema) == 0) { mx->recursive_count = 1; mx->ownerThread = (mx->kind != PTHREAD_MUTEX_FAST_NP - ? pthread_self() + ? pthread_self () : (pthread_t) PTW32_MUTEX_OWNER_ANONYMOUS); } else @@ -182,5 +107,5 @@ pthread_mutex_lock(pthread_mutex_t *mutex) } } - return(result); + return (result); } -- cgit v1.2.3