diff options
| author | rpj <rpj> | 2003-09-18 02:31:39 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2003-09-18 02:31:39 +0000 | 
| commit | af1871fba4fc253b5a31e4a0eed667fe79f534d7 (patch) | |
| tree | 1242599d7334ae50c5c05f9b23b52876e4287924 /tests/benchtest.h | |
| parent | fac679912b15dd89cafdb09bf873d7eacc80a05e (diff) | |
Cleanup and fixes to thread priority management. Other minor changes.snap-2003-09-18
Diffstat (limited to 'tests/benchtest.h')
| -rw-r--r-- | tests/benchtest.h | 295 | 
1 files changed, 8 insertions, 287 deletions
| diff --git a/tests/benchtest.h b/tests/benchtest.h index c04e62e..2401622 100644 --- a/tests/benchtest.h +++ b/tests/benchtest.h @@ -39,7 +39,7 @@ enum {    OLD_WIN32MUTEX  }; -static int old_mutex_use = OLD_WIN32CS; +extern int old_mutex_use;  struct old_mutex_t_ {    HANDLE mutex; @@ -54,293 +54,14 @@ struct old_mutexattr_t_ {  typedef struct old_mutexattr_t_ * old_mutexattr_t; -static BOOL (WINAPI *ptw32_try_enter_critical_section)(LPCRITICAL_SECTION) = NULL; -static HINSTANCE ptw32_h_kernel32; +extern BOOL (WINAPI *ptw32_try_enter_critical_section)(LPCRITICAL_SECTION); +extern HINSTANCE ptw32_h_kernel32;  #define PTW32_OBJECT_AUTO_INIT ((void *) -1) -static int -old_mutex_init(old_mutex_t *mutex, const old_mutexattr_t *attr) -{ -  int result = 0; -  old_mutex_t mx; - -  if (mutex == NULL) -    { -      return EINVAL; -    } - -  mx = (old_mutex_t) calloc(1, sizeof(*mx)); - -  if (mx == NULL) -    { -      result = ENOMEM; -      goto FAIL0; -    } - -  mx->mutex = 0; - -  if (attr != NULL -      && *attr != NULL -      && (*attr)->pshared == PTHREAD_PROCESS_SHARED -      ) -    { -      result = ENOSYS; -    } -  else -    { -        CRITICAL_SECTION cs; - -        /* -         * Load KERNEL32 and try to get address of TryEnterCriticalSection -         */ -        ptw32_h_kernel32 = LoadLibrary(TEXT("KERNEL32.DLL")); -        ptw32_try_enter_critical_section = (BOOL (WINAPI *)(LPCRITICAL_SECTION)) - -#if defined(NEED_UNICODE_CONSTS) -        GetProcAddress(ptw32_h_kernel32, -                       (const TCHAR *)TEXT("TryEnterCriticalSection")); -#else -        GetProcAddress(ptw32_h_kernel32, -                       (LPCSTR) "TryEnterCriticalSection"); -#endif - -        if (ptw32_try_enter_critical_section != NULL) -          { -            InitializeCriticalSection(&cs); -            if ((*ptw32_try_enter_critical_section)(&cs)) -              { -                LeaveCriticalSection(&cs); -              } -            else -              { -                /* -                 * Not really supported (Win98?). -                 */ -                ptw32_try_enter_critical_section = NULL; -              } -            DeleteCriticalSection(&cs); -          } - -        if (ptw32_try_enter_critical_section == NULL) -          { -            (void) FreeLibrary(ptw32_h_kernel32); -            ptw32_h_kernel32 = 0; -          } - -      if (old_mutex_use == OLD_WIN32CS) -	{ -	  InitializeCriticalSection(&mx->cs); -	} -      else if (old_mutex_use == OLD_WIN32MUTEX) -      { -	  mx->mutex = CreateMutex (NULL, -				   FALSE, -				   NULL); - -	  if (mx->mutex == 0) -	    { -	      result = EAGAIN; -	    } -	} -      else -	{ -        result = EINVAL; -      } -    } - -  if (result != 0 && mx != NULL) -    { -      free(mx); -      mx = NULL; -    } - -FAIL0: -  *mutex = mx; - -  return(result); -} - - -static int -old_mutex_lock(old_mutex_t *mutex) -{ -  int result = 0; -  old_mutex_t mx; - -  if (mutex == NULL || *mutex == NULL) -    { -      return EINVAL; -    } - -  if (*mutex == (old_mutex_t) PTW32_OBJECT_AUTO_INIT) -    { -      /* -       * Don't use initialisers when benchtesting. -       */ -      result = EINVAL; -    } - -  mx = *mutex; - -  if (result == 0) -    { -      if (mx->mutex == 0) -	{ -	  EnterCriticalSection(&mx->cs); -	} -      else -	{ -	  result = (WaitForSingleObject(mx->mutex, INFINITE)  -		    == WAIT_OBJECT_0) -	    ? 0 -	    : EINVAL; -	} -    } - -  return(result); -} - -static int -old_mutex_unlock(old_mutex_t *mutex) -{ -  int result = 0; -  old_mutex_t mx; - -  if (mutex == NULL || *mutex == NULL) -    { -      return EINVAL; -    } - -  mx = *mutex; - -  if (mx != (old_mutex_t) PTW32_OBJECT_AUTO_INIT) -    { -      if (mx->mutex == 0) -	{ -	  LeaveCriticalSection(&mx->cs); -	} -      else -	{ -	  result = (ReleaseMutex (mx->mutex) ? 0 : EINVAL); -	} -    } -  else -    { -      result = EINVAL; -    } - -  return(result); -} - - -static int -old_mutex_trylock(old_mutex_t *mutex) -{ -  int result = 0; -  old_mutex_t mx; - -  if (mutex == NULL || *mutex == NULL) -    { -      return EINVAL; -    } - -  if (*mutex == (old_mutex_t) PTW32_OBJECT_AUTO_INIT) -    { -      /* -       * Don't use initialisers when benchtesting. -       */ -      result = EINVAL; -    } - -  mx = *mutex; - -  if (result == 0) -    { -      if (mx->mutex == 0) -	{ -	  if (ptw32_try_enter_critical_section == NULL) -          { -            result = 0; -          } -        else if ((*ptw32_try_enter_critical_section)(&mx->cs) != TRUE) -	    { -	      result = EBUSY; -	    } -	} -      else -	{ -	  DWORD status; - -	  status = WaitForSingleObject (mx->mutex, 0); - -	  if (status != WAIT_OBJECT_0) -	    { -	      result = ((status == WAIT_TIMEOUT) -			? EBUSY -			: EINVAL); -	    } -	} -    } - -  return(result); -} - - -static int -old_mutex_destroy(old_mutex_t *mutex) -{ -  int result = 0; -  old_mutex_t mx; - -  if (mutex == NULL -      || *mutex == NULL) -    { -      return EINVAL; -    } - -  if (*mutex != (old_mutex_t) PTW32_OBJECT_AUTO_INIT) -    { -      mx = *mutex; - -      if ((result = old_mutex_trylock(&mx)) == 0) -        { -          *mutex = NULL; - -          (void) old_mutex_unlock(&mx); - -          if (mx->mutex == 0) -            { -              DeleteCriticalSection(&mx->cs); -            } -          else -            { -              result = (CloseHandle (mx->mutex) ? 0 : EINVAL); -            } - -          if (result == 0) -            { -              mx->mutex = 0; -              free(mx); -            } -          else -            { -              *mutex = mx; -            } -        } -    } -  else -    { -      result = EINVAL; -    } - -  if (ptw32_try_enter_critical_section != NULL) -    { -      (void) FreeLibrary(ptw32_h_kernel32); -      ptw32_h_kernel32 = 0; -    } - -  return(result); -} - +int old_mutex_init(old_mutex_t *mutex, const old_mutexattr_t *attr); +int old_mutex_lock(old_mutex_t *mutex); +int old_mutex_unlock(old_mutex_t *mutex); +int old_mutex_trylock(old_mutex_t *mutex); +int old_mutex_destroy(old_mutex_t *mutex);  /****************************************************************************************/ | 
