Home | History | Annotate | Download | only in src
      1 #include "test/jemalloc_test.h"
      2 
      3 #ifndef _CRT_SPINCOUNT
      4 #define	_CRT_SPINCOUNT 4000
      5 #endif
      6 
      7 bool
      8 mtx_init(mtx_t *mtx)
      9 {
     10 
     11 #ifdef _WIN32
     12 	if (!InitializeCriticalSectionAndSpinCount(&mtx->lock, _CRT_SPINCOUNT))
     13 		return (true);
     14 #elif (defined(JEMALLOC_OSSPIN))
     15 	mtx->lock = 0;
     16 #else
     17 	pthread_mutexattr_t attr;
     18 
     19 	if (pthread_mutexattr_init(&attr) != 0)
     20 		return (true);
     21 	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT);
     22 	if (pthread_mutex_init(&mtx->lock, &attr) != 0) {
     23 		pthread_mutexattr_destroy(&attr);
     24 		return (true);
     25 	}
     26 	pthread_mutexattr_destroy(&attr);
     27 #endif
     28 	return (false);
     29 }
     30 
     31 void
     32 mtx_fini(mtx_t *mtx)
     33 {
     34 
     35 #ifdef _WIN32
     36 #elif (defined(JEMALLOC_OSSPIN))
     37 #else
     38 	pthread_mutex_destroy(&mtx->lock);
     39 #endif
     40 }
     41 
     42 void
     43 mtx_lock(mtx_t *mtx)
     44 {
     45 
     46 #ifdef _WIN32
     47 	EnterCriticalSection(&mtx->lock);
     48 #elif (defined(JEMALLOC_OSSPIN))
     49 	OSSpinLockLock(&mtx->lock);
     50 #else
     51 	pthread_mutex_lock(&mtx->lock);
     52 #endif
     53 }
     54 
     55 void
     56 mtx_unlock(mtx_t *mtx)
     57 {
     58 
     59 #ifdef _WIN32
     60 	LeaveCriticalSection(&mtx->lock);
     61 #elif (defined(JEMALLOC_OSSPIN))
     62 	OSSpinLockUnlock(&mtx->lock);
     63 #else
     64 	pthread_mutex_unlock(&mtx->lock);
     65 #endif
     66 }
     67