about summary refs log tree commit diff stats
path: root/src/include/box64context.h
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-04-09 21:21:55 +0800
committerGitHub <noreply@github.com>2025-04-09 15:21:55 +0200
commit5ea247b84c046af8894cbe27ff5596e738fd47a1 (patch)
tree2c0674c4f9a65af832eca9b8097077aee4e2d88d /src/include/box64context.h
parent8c991cb6762d3a1384cec16d6e54402ce276ea9e (diff)
downloadbox64-5ea247b84c046af8894cbe27ff5596e738fd47a1.tar.gz
box64-5ea247b84c046af8894cbe27ff5596e738fd47a1.zip
Made custommem OS-independent (#2517)
Diffstat (limited to 'src/include/box64context.h')
-rw-r--r--src/include/box64context.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/include/box64context.h b/src/include/box64context.h
index 718d95b3..97c410ad 100644
--- a/src/include/box64context.h
+++ b/src/include/box64context.h
@@ -240,6 +240,21 @@ typedef struct box64context_s {
 
 } box64context_t;
 
+#ifndef USE_CUSTOM_MUTEX
+#define mutex_lock(A)    pthread_mutex_lock(A)
+#define mutex_trylock(A) pthread_mutex_trylock(A)
+#define mutex_unlock(A)  pthread_mutex_unlock(A)
+#else
+#define mutex_lock(A)                             \
+    do {                                          \
+        uint32_t tid = (uint32_t)GetTID();        \
+        while (native_lock_storeifnull_d(A, tid)) \
+            sched_yield();                        \
+    } while (0)
+#define mutex_trylock(A) native_lock_storeifnull_d(A, (uint32_t)GetTID())
+#define mutex_unlock(A)  native_lock_storeifref_d(A, 0, (uint32_t)GetTID())
+#endif
+
 extern box64context_t *my_context; // global context
 
 box64context_t *NewBox64Context(int argc);