Skip to content

Commit 108a645

Browse files
committed
Trying to fix compilation errors with atomics. C11 does not allow atomic operations on incomplete types and void is considered an incomplete type.
1 parent c841202 commit 108a645

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/lib/posix/atomic_operations.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,20 +94,23 @@ POSIX_ATOMIC_ALL_OPS(ptk_u16_t, u16)
9494
POSIX_ATOMIC_ALL_OPS(ptk_u32_t, u32)
9595
POSIX_ATOMIC_ALL_OPS(ptk_u64_t, u64)
9696

97-
// Pointer operations
97+
98+
#include <stdint.h>
99+
// Pointer operations using uintptr_t for atomicity
98100
void *ptk_atomic_load_ptr(ptk_atomic void **src_value) {
99-
return atomic_load((_Atomic void **)src_value);
101+
uintptr_t val = atomic_load((_Atomic uintptr_t *)src_value);
102+
return (void *)val;
100103
}
101104

102105
ptk_err_t ptk_atomic_store_ptr(ptk_atomic void **dest_value, void *src_value) {
103-
atomic_store((_Atomic void **)dest_value, src_value);
106+
atomic_store((_Atomic uintptr_t *)dest_value, (uintptr_t)src_value);
104107
return PTK_OK;
105108
}
106109

107110
void *ptk_atomic_compare_and_swap_ptr(ptk_atomic void **dest_value, void *old_value, void *new_value) {
108-
void *expected = old_value;
109-
atomic_compare_exchange_strong((_Atomic void **)dest_value, &expected, new_value);
110-
return expected;
111+
uintptr_t expected = (uintptr_t)old_value;
112+
atomic_compare_exchange_strong((_Atomic uintptr_t *)dest_value, &expected, (uintptr_t)new_value);
113+
return (void *)expected;
111114
}
112115

113116
#else

0 commit comments

Comments
 (0)