ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
threading.c
Go to the documentation of this file.
1
7#include <ascii-chat/platform/abstraction.h>
8#include <ascii-chat/platform/thread.h>
9#include <pthread.h>
10#include <stdint.h>
11
12// Emscripten provides pthread.h but mutexes don't work correctly with pthreads in WASM
13// The JS side is single-threaded, so we can safely make mutexes no-ops
14// This avoids deadlocks from pthread_mutex_t not being properly initialized in WASM
15
16int mutex_init(mutex_t *mutex) {
17 (void)mutex;
18 return 0; // Success
19}
20
21int mutex_destroy(mutex_t *mutex) {
22 (void)mutex;
23 return 0; // Success
24}
25
26int mutex_lock_impl(mutex_t *mutex) {
27 (void)mutex;
28 return 0; // Success - no-op
29}
30
31int mutex_trylock_impl(mutex_t *mutex) {
32 (void)mutex;
33 return 0; // Success - no-op
34}
35
36int mutex_unlock_impl(mutex_t *mutex) {
37 (void)mutex;
38 return 0; // Success - no-op
39}
40
41// Thread functions (not used in mirror mode, but provided for completeness)
42int asciichat_thread_create(asciichat_thread_t *thread, void *(*start_routine)(void *), void *arg) {
43 return pthread_create(thread, NULL, start_routine, arg);
44}
45
46int asciichat_thread_join(asciichat_thread_t *thread, void **retval) {
47 return pthread_join(*thread, retval);
48}
49
50int asciichat_thread_detach(asciichat_thread_t *thread) {
51 return pthread_detach(*thread);
52}
53
54asciichat_thread_t asciichat_thread_self(void) {
55 return pthread_self();
56}
57
58int asciichat_thread_equal(asciichat_thread_t t1, asciichat_thread_t t2) {
59 return pthread_equal(t1, t2);
60}
61
62// Read-write lock functions
63int rwlock_init(rwlock_t *rwlock) {
64 return pthread_rwlock_init(rwlock, NULL);
65}
66
67int rwlock_rdlock_impl(rwlock_t *rwlock) {
68 return pthread_rwlock_rdlock(rwlock);
69}
70
71int rwlock_wrlock_impl(rwlock_t *rwlock) {
72 return pthread_rwlock_wrlock(rwlock);
73}
74
76 return pthread_rwlock_unlock(rwlock);
77}
78
80 return pthread_rwlock_unlock(rwlock);
81}
82
83// Thread ID function
85 return (uint64_t)pthread_self();
86}
87
88// Thread-local storage functions
89int ascii_tls_key_create(tls_key_t *key, void (*destructor)(void *)) {
90 return pthread_key_create(key, destructor);
91}
92
93int ascii_tls_key_delete(tls_key_t key) {
94 return pthread_key_delete(key);
95}
96
97void *ascii_tls_get(tls_key_t key) {
98 return pthread_getspecific(key);
99}
100
101int ascii_tls_set(tls_key_t key, void *value) {
102 return pthread_setspecific(key, value);
103}
int ascii_tls_key_create(tls_key_t *key, void(*destructor)(void *))
Definition threading.c:89
int ascii_tls_set(tls_key_t key, void *value)
Definition threading.c:101
int mutex_lock_impl(mutex_t *mutex)
Definition threading.c:26
int mutex_init(mutex_t *mutex)
Definition threading.c:16
int rwlock_wrunlock_impl(rwlock_t *rwlock)
Definition threading.c:79
int asciichat_thread_detach(asciichat_thread_t *thread)
Definition threading.c:50
int asciichat_thread_create(asciichat_thread_t *thread, void *(*start_routine)(void *), void *arg)
Definition threading.c:42
int rwlock_wrlock_impl(rwlock_t *rwlock)
Definition threading.c:71
int mutex_trylock_impl(mutex_t *mutex)
Definition threading.c:31
int rwlock_rdunlock_impl(rwlock_t *rwlock)
Definition threading.c:75
asciichat_thread_t asciichat_thread_self(void)
Definition threading.c:54
int rwlock_init(rwlock_t *rwlock)
Definition threading.c:63
int asciichat_thread_join(asciichat_thread_t *thread, void **retval)
Definition threading.c:46
void * ascii_tls_get(tls_key_t key)
Definition threading.c:97
int ascii_tls_key_delete(tls_key_t key)
Definition threading.c:93
int rwlock_rdlock_impl(rwlock_t *rwlock)
Definition threading.c:67
int asciichat_thread_equal(asciichat_thread_t t1, asciichat_thread_t t2)
Definition threading.c:58
uint64_t asciichat_thread_current_id(void)
Definition threading.c:84
int mutex_unlock_impl(mutex_t *mutex)
Definition threading.c:36
int mutex_destroy(mutex_t *mutex)
Definition threading.c:21
rwlock_t rwlock
Read-write lock for thread-safe access (uthash requires external locking)
Definition util/time.c:32