diff options
| author | rpj <rpj> | 2002-01-08 02:21:06 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2002-01-08 02:21:06 +0000 | 
| commit | 5f7ea668d6d4c96d9e0efea21ac5e300fda552ad (patch) | |
| tree | 3d1f0fddfaf97bd6232edc9b05318d8daa0fca4c /mutex.c | |
| parent | 0337d817b128c648d97a79f42b303421b5b76386 (diff) | |
        * mutex.c (pthread_mutex_trylock): use
        ptw32_interlocked_compare_exchange function pointer
        rather than ptw32_InterlockedCompareExchange() directly
        to retain portability to non-iX86 processors,
        e.g. WinCE etc. The pointer will point to the native
        OS version of InterlockedCompareExchange() if the
        OS supports it (see ChangeLog entry of 2001-10-17).
Diffstat (limited to 'mutex.c')
| -rw-r--r-- | mutex.c | 60 | 
1 files changed, 30 insertions, 30 deletions
| @@ -699,12 +699,12 @@ pthread_mutex_unlock(pthread_mutex_t *mutex)  	    {  	      mx->ownerThread = NULL; -          if( InterlockedDecrement( &mx->lock_idx ) >= 0 ) -          { -             /* Someone is waiting on that mutex */ -             ReleaseSemaphore( mx->wait_sema, 1, NULL ); -          } -        } +              if( InterlockedDecrement( &mx->lock_idx ) >= 0 ) +                { +                  /* Someone is waiting on that mutex */ +                  ReleaseSemaphore( mx->wait_sema, 1, NULL ); +                } +            }  	}        else  	{ @@ -745,35 +745,35 @@ pthread_mutex_trylock(pthread_mutex_t *mutex)    if (result == 0)      { - -      if( PTW32_MUTEX_LOCK_IDX_INIT == ptw32_InterlockedCompareExchange( -             &mx->lock_idx, 0, PTW32_MUTEX_LOCK_IDX_INIT ) ) -      { -         mx->recursive_count = 1; -         mx->ownerThread = (mx->kind != PTHREAD_MUTEX_FAST_NP -                            ? pthread_self() -                            : (pthread_t) PTW32_MUTEX_OWNER_ANONYMOUS); -      } - +      if ( (PTW32_INTERLOCKED_LONG) PTW32_MUTEX_LOCK_IDX_INIT == +           ptw32_interlocked_compare_exchange((PTW32_INTERLOCKED_LPLONG) &mx->lock_idx, +                                              (PTW32_INTERLOCKED_LONG) 0, +                                              (PTW32_INTERLOCKED_LONG) PTW32_MUTEX_LOCK_IDX_INIT)) +        { +          mx->recursive_count = 1; +          mx->ownerThread = (mx->kind != PTHREAD_MUTEX_FAST_NP +                             ? 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_RECURSIVE_NP ) +        { +          if( mx->kind != PTHREAD_MUTEX_FAST_NP && +              pthread_equal( mx->ownerThread, pthread_self() ) )              { -               mx->recursive_count++; +              if( mx->kind == PTHREAD_MUTEX_RECURSIVE_NP ) +                { +                  mx->recursive_count++; +                } +              else +                { +                  result = EDEADLK; +                }              } -            else +          else              { -               result = EDEADLK; +              result = EBUSY;              } -         } -         else -         { -            result = EBUSY; -         } -      } +        }      }    return(result); | 
