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