10f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans/* 20f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans * mtx is a slightly simplified version of malloc_mutex. This code duplication 30f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans * is unfortunate, but there are allocator bootstrapping considerations that 40f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans * would leak into the test infrastructure if malloc_mutex were used directly 50f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans * in tests. 60f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans */ 70f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans 80f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evanstypedef struct { 90f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans#ifdef _WIN32 100f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans CRITICAL_SECTION lock; 110f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans#elif (defined(JEMALLOC_OSSPIN)) 120f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans OSSpinLock lock; 130f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans#else 140f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans pthread_mutex_t lock; 150f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans#endif 160f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans} mtx_t; 170f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evans 180f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evansbool mtx_init(mtx_t *mtx); 190f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evansvoid mtx_fini(mtx_t *mtx); 200f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evansvoid mtx_lock(mtx_t *mtx); 210f4f1efd94d33a4bbf766d3d4e7e349fa7c0d3b9Jason Evansvoid mtx_unlock(mtx_t *mtx); 22