ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
platform/wasm/lifecycle.c
Go to the documentation of this file.
1
7#include <ascii-chat/atomic.h>
8#include <stdbool.h>
9
10#ifdef __EMSCRIPTEN__
11#include <emscripten.h>
12#endif
13
14bool lifecycle_init(lifecycle_t *lc, const char *name) {
15 (void)name;
16 if (!lc)
17 return false;
18
19 // Only initialize if not already initialized (matches native CAS behavior)
20 int expected = LIFECYCLE_UNINITIALIZED;
21 return atomic_cas_int(&lc->state, &expected, LIFECYCLE_INITIALIZED);
22}
23
25 if (!lc)
26 return false;
27
28 // Try to transition from UNINITIALIZED to INITIALIZING
29 int expected = LIFECYCLE_UNINITIALIZED;
30 return atomic_cas_int(&lc->state, &expected, LIFECYCLE_INITIALIZING);
31}
32
34 if (!lc)
35 return;
37}
38
40 if (!lc)
41 return;
43}
44
46 if (!lc)
47 return false;
49 return true;
50}
51
55
57 if (!lc) {
58 return false;
59 }
60
61 // WASM: Use non-tracking atomic load to avoid time_get_ns() which can block
62 // Simply read the state value without the atomic_on_load callback
63 int state = (int)(int32_t)atomic_load((const _Atomic(uint64_t) *)&lc->state);
64 bool result = state == LIFECYCLE_INITIALIZED;
65
66 return result;
67}
void atomic_store_int(atomic_t *a, int value)
Atomically store an int value.
Definition atomic.c:202
bool atomic_cas_int(atomic_t *a, int *expected, int new_value)
Atomically compare-and-swap an int.
Definition atomic.c:225
⚛️ Atomic operations abstraction layer with debug tracking
unsigned long long uint64_t
Definition common.h:59
Lock-free module lifecycle state machine using pure stdatomic.
@ LIFECYCLE_INITIALIZING
init_once winner in progress; losers spin
Definition lifecycle.h:42
@ LIFECYCLE_INITIALIZED
Ready to use.
Definition lifecycle.h:43
@ LIFECYCLE_UNINITIALIZED
Not yet initialized (zero = default)
Definition lifecycle.h:41
void lifecycle_init_abort(lifecycle_t *lc)
bool lifecycle_shutdown_forever(lifecycle_t *lc)
bool lifecycle_is_initialized(const lifecycle_t *lc)
void lifecycle_init_commit(lifecycle_t *lc)
bool lifecycle_init(lifecycle_t *lc, const char *name)
bool lifecycle_shutdown(lifecycle_t *lc)
bool lifecycle_init_once(lifecycle_t *lc)
ClangTool/LibTooling compatibility shim for stdbool.h.
atomic_t state
lifecycle_state_t enum value
Definition lifecycle.h:59