Alfred Agrell (@Alcaro) commented about dlls/winewayland.drv/waylanddrv.h:
+#define WINEWAYLAND_RESOURCE_TYPE _Atomic unsigned char +#define WINEWAYLAND_RESOURCE_INIT ATOMIC_VAR_INIT(0) +#define WINEWAYLAND_RESOURCE_LOCK(RESOURCE) { \
- unsigned char expected = 0; \
- while(!atomic_compare_exchange_weak(RESOURCE, &expected, 1)) { \
syscall(SYS_futex, RESOURCE, FUTEX_WAIT, 1, NULL, NULL, 0); \
- } \
+} +#define WINEWAYLAND_RESOURCE_UNLOCK(RESOURCE) { \
- atomic_store(RESOURCE, 0); \
- syscall(SYS_futex, RESOURCE, FUTEX_WAKE, 1, NULL, NULL, 0); \
+} +#define WINEWAYLAND_RESOURCE_DESTROY(RESOURCE) {} +#endif +#else +# error C11 Atomic Operations not support. C version is lower than C11.
Are C11 atomics mandatory? If yes, the below #defines are unnecessary; if no, this #error doesn't belong.