Skip to content

Commit 5d4b70a

Browse files
committed
[WASM_WORKERS] Use typedefs for async callback functions. NFC
1 parent b5ffb21 commit 5d4b70a

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

system/include/emscripten/atomic.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ _EM_INLINE int64_t emscripten_atomic_notify(void *addr __attribute__((nonnull)),
229229

230230
// Represents a pending 'Atomics.waitAsync' wait operation.
231231
#define ATOMICS_WAIT_TOKEN_T int32_t
232+
typedef void (*emscripten_async_wait_callback_t)(int32_t *address, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData);
232233

233234
#define EMSCRIPTEN_IS_VALID_WAIT_TOKEN(token) ((token) <= 0)
234235

@@ -254,7 +255,7 @@ _EM_INLINE int64_t emscripten_atomic_notify(void *addr __attribute__((nonnull)),
254255
// this function returned a valid wait token.
255256
ATOMICS_WAIT_TOKEN_T emscripten_atomic_wait_async(void *addr __attribute__((nonnull)),
256257
uint32_t value,
257-
void (*asyncWaitFinished)(int32_t *addr, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData) __attribute__((nonnull)),
258+
emscripten_async_wait_callback_t asyncWaitFinished __attribute__((nonnull)),
258259
void *userData,
259260
double maxWaitMilliseconds);
260261

system/include/emscripten/wasm_worker.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,11 @@ bool emscripten_lock_busyspin_wait_acquire(emscripten_lock_t *lock __attribute__
169169
// acquire without contention from other threads.
170170
void emscripten_lock_busyspin_waitinf_acquire(emscripten_lock_t *lock __attribute__((nonnull)));
171171

172+
// Callback used in emscripten_lock_async_acquire.
173+
// This currently differs from emscripten_async_wait_callback_t due to the
174+
// address being volatile.
175+
typedef void (*emscripten_async_lock_acquire_callback_t)(volatile void *address, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData);
176+
172177
// Registers an *asynchronous* lock acquire operation. The calling thread will
173178
// asynchronously try to obtain the given lock after the calling thread yields
174179
// back to the event loop. If the attempt is successful within
@@ -184,7 +189,7 @@ void emscripten_lock_busyspin_waitinf_acquire(emscripten_lock_t *lock __attribut
184189
// use this API in Worker, you cannot utilise an infinite loop programming
185190
// model.
186191
void emscripten_lock_async_acquire(emscripten_lock_t *lock __attribute__((nonnull)),
187-
void (*asyncWaitFinished)(volatile void *address, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData) __attribute__((nonnull)),
192+
emscripten_async_lock_acquire_callback_t asyncWaitFinished __attribute__((nonnull)),
188193
void *userData,
189194
double maxWaitMilliseconds);
190195

@@ -218,7 +223,7 @@ int emscripten_semaphore_try_acquire(emscripten_semaphore_t *sem __attribute__((
218223
// acquired. If you use this API in Worker, you cannot run an infinite loop.
219224
void emscripten_semaphore_async_acquire(emscripten_semaphore_t *sem __attribute__((nonnull)),
220225
int num,
221-
void (*asyncWaitFinished)(volatile void *address, uint32_t idx, ATOMICS_WAIT_RESULT_T result, void *userData) __attribute__((nonnull)),
226+
emscripten_async_wait_callback_t asyncWaitFinished __attribute__((nonnull)),
222227
void *userData,
223228
double maxWaitMilliseconds);
224229

@@ -267,10 +272,11 @@ void emscripten_condvar_waitinf(emscripten_condvar_t *condvar __attribute__((non
267272
// the calling thread will not try to reacquire the lock.
268273
bool emscripten_condvar_wait(emscripten_condvar_t *condvar __attribute__((nonnull)), emscripten_lock_t *lock __attribute__((nonnull)), int64_t maxWaitNanoseconds);
269274

275+
270276
// Asynchronously wait for the given condition variable to signal.
271277
ATOMICS_WAIT_TOKEN_T emscripten_condvar_wait_async(emscripten_condvar_t *condvar __attribute__((nonnull)),
272278
emscripten_lock_t *lock __attribute__((nonnull)),
273-
void (*asyncWaitFinished)(int32_t *address, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData) __attribute__((nonnull)),
279+
emscripten_async_wait_callback_t asyncWaitFinished __attribute__((nonnull)),
274280
void *userData,
275281
double maxWaitMilliseconds);
276282

system/lib/wasm_worker/library_wasm_worker.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ bool emscripten_condvar_wait(emscripten_condvar_t *condvar, emscripten_lock_t *l
231231
}
232232

233233
ATOMICS_WAIT_TOKEN_T emscripten_condvar_wait_async(emscripten_condvar_t *condvar,
234-
emscripten_lock_t *lock,
235-
void (*asyncWaitFinished)(int32_t *address, uint32_t value, ATOMICS_WAIT_RESULT_T waitResult, void *userData),
236-
void *userData,
237-
double maxWaitMilliseconds)
234+
emscripten_lock_t *lock,
235+
emscripten_async_wait_callback_t asyncWaitFinished,
236+
void *userData,
237+
double maxWaitMilliseconds)
238238
{
239239
int val = emscripten_atomic_load_u32((void*)condvar);
240240
emscripten_lock_release(lock);

0 commit comments

Comments
 (0)