wasm_suspend_flags.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (C) 2023 Amazon Inc. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #ifndef _WASM_SUSPEND_FLAGS_H
  6. #define _WASM_SUSPEND_FLAGS_H
  7. #include "bh_atomic.h"
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /* Need to terminate */
  12. #define WASM_SUSPEND_FLAG_TERMINATE 0x1
  13. /* Need to suspend */
  14. #define WASM_SUSPEND_FLAG_SUSPEND 0x2
  15. /* Need to go into breakpoint */
  16. #define WASM_SUSPEND_FLAG_BREAKPOINT 0x4
  17. /* Return from pthread_exit */
  18. #define WASM_SUSPEND_FLAG_EXIT 0x8
  19. /* The thread might be blocking */
  20. #define WASM_SUSPEND_FLAG_BLOCKING 0x10
  21. typedef union WASMSuspendFlags {
  22. bh_atomic_32_t flags;
  23. uintptr_t __padding__;
  24. } WASMSuspendFlags;
  25. #define WASM_SUSPEND_FLAGS_IS_ATOMIC BH_ATOMIC_32_IS_ATOMIC
  26. #define WASM_SUSPEND_FLAGS_GET(s_flags) BH_ATOMIC_32_LOAD(s_flags.flags)
  27. #define WASM_SUSPEND_FLAGS_FETCH_OR(s_flags, val) \
  28. BH_ATOMIC_32_FETCH_OR(s_flags.flags, val)
  29. #define WASM_SUSPEND_FLAGS_FETCH_AND(s_flags, val) \
  30. BH_ATOMIC_32_FETCH_AND(s_flags.flags, val)
  31. #define WASM_SUSPEND_FLAG_INHERIT_MASK (~WASM_SUSPEND_FLAG_BLOCKING)
  32. #if WASM_SUSPEND_FLAGS_IS_ATOMIC != 0
  33. #define WASM_SUSPEND_FLAGS_LOCK(lock) (void)0
  34. #define WASM_SUSPEND_FLAGS_UNLOCK(lock) (void)0
  35. #else /* else of WASM_SUSPEND_FLAGS_IS_ATOMIC */
  36. #define WASM_SUSPEND_FLAGS_LOCK(lock) os_mutex_lock(&lock)
  37. #define WASM_SUSPEND_FLAGS_UNLOCK(lock) os_mutex_unlock(&lock);
  38. #endif /* WASM_SUSPEND_FLAGS_IS_ATOMIC */
  39. #ifdef __cplusplus
  40. }
  41. #endif
  42. #endif /* end of _WASM_SUSPEND_FLAGS_H */