|
1 | | -/* HASH CRC-32:0xbad572fd */ |
| 1 | +/* HASH CRC-32:0x80470306 */ |
2 | 2 | /* Copyright (c) 2019-2025 Griefer@Work * |
3 | 3 | * * |
4 | 4 | * This software is provided 'as-is', without any express or implied * |
@@ -71,21 +71,34 @@ __SYSDECL_BEGIN |
71 | 71 | * able to do recursive write-locks. |
72 | 72 | */ |
73 | 73 |
|
74 | | -#define SHARED_RECURSIVE_RWLOCK_INIT { SHARED_RWLOCK_INIT, __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
75 | | -#define SHARED_RECURSIVE_RWLOCK_INIT_READ { SHARED_RWLOCK_INIT_READ, __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
76 | | -#define shared_recursive_rwlock_init(self) (void)(shared_rwlock_init(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
77 | | -#define shared_recursive_rwlock_init_read(self) (void)(shared_rwlock_init_read(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
78 | | -#define shared_recursive_rwlock_init_write(self) (void)(shared_rwlock_init_write(&(self)->srr_lock), __shared_recursive_rwlock_setown(self)) |
| 74 | +#define SHARED_RECURSIVE_RWLOCK_INIT(self) { SHARED_RWLOCK_INIT(self.srr_lock), __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
| 75 | +#define SHARED_RECURSIVE_RWLOCK_INIT_READ(self) { SHARED_RWLOCK_INIT_READ(self.srr_lock), __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
| 76 | +#define SHARED_RECURSIVE_RWLOCK_INIT_NAMED(self, name) { SHARED_RWLOCK_INIT_NAMED(self.srr_lock, name ".srr_lock"), __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
| 77 | +#define SHARED_RECURSIVE_RWLOCK_INIT_READ_NAMED(self, name) { SHARED_RWLOCK_INIT_READ_NAMED(self.srr_lock, name ".srr_lock"), __SHARED_RECURSIVE_RWLOCK_BADTID, 0 } |
| 78 | +#define shared_recursive_rwlock_init(self) (void)(shared_rwlock_init(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
| 79 | +#define shared_recursive_rwlock_init_read(self) (void)(shared_rwlock_init_read(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
| 80 | +#define shared_recursive_rwlock_init_write(self) (void)(shared_rwlock_init_write(&(self)->srr_lock), __shared_recursive_rwlock_setown(self)) |
| 81 | +#define shared_recursive_rwlock_init_named(self, name) (void)(shared_rwlock_init_named(&(self)->srr_lock, name ".srr_lock"), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
| 82 | +#define shared_recursive_rwlock_init_read_named(self, name) (void)(shared_rwlock_init_read_named(&(self)->srr_lock, name ".srr_lock"), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, (self)->srr_wrcnt = 0) |
| 83 | +#define shared_recursive_rwlock_init_write_named(self, name) (void)(shared_rwlock_init_write_named(&(self)->srr_lock, name ".srr_lock"), __shared_recursive_rwlock_setown(self)) |
79 | 84 | #ifdef __SHARED_RECURSIVE_RWLOCK_BADTID_ISZERO |
80 | | -#define shared_recursive_rwlock_cinit(self) (shared_rwlock_cinit(&(self)->srr_lock), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
81 | | -#define shared_recursive_rwlock_cinit_read(self) (shared_rwlock_cinit_read(&(self)->srr_lock), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
| 85 | +#define shared_recursive_rwlock_cinit(self) (shared_rwlock_cinit(&(self)->srr_lock), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
| 86 | +#define shared_recursive_rwlock_cinit_read(self) (shared_rwlock_cinit_read(&(self)->srr_lock), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
| 87 | +#define shared_recursive_rwlock_cinit_named(self, name) (shared_rwlock_cinit_named(&(self)->srr_lock, name ".srr_lock"), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
| 88 | +#define shared_recursive_rwlock_cinit_read_named(self, name) (shared_rwlock_cinit_read_named(&(self)->srr_lock, name ".srr_lock"), __hybrid_assert((self)->srr_writer == __SHARED_RECURSIVE_RWLOCK_BADTID), __hybrid_assert((self)->srr_wrcnt == 0)) |
82 | 89 | #else /* __SHARED_RECURSIVE_RWLOCK_BADTID_ISZERO */ |
83 | | -#define shared_recursive_rwlock_cinit(self) (shared_rwlock_cinit(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
84 | | -#define shared_recursive_rwlock_cinit_read(self) (shared_rwlock_cinit_read(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
| 90 | +#define shared_recursive_rwlock_cinit(self) (shared_rwlock_cinit(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
| 91 | +#define shared_recursive_rwlock_cinit_read(self) (shared_rwlock_cinit_read(&(self)->srr_lock), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
| 92 | +#define shared_recursive_rwlock_cinit_named(self, name) (shared_rwlock_cinit_named(&(self)->srr_lock, name ".srr_lock"), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
| 93 | +#define shared_recursive_rwlock_cinit_read_named(self, name) (shared_rwlock_cinit_read_named(&(self)->srr_lock, name ".srr_lock"), (self)->srr_writer = __SHARED_RECURSIVE_RWLOCK_BADTID, __hybrid_assert((self)->srr_wrcnt == 0)) |
85 | 94 | #endif /* !__SHARED_RECURSIVE_RWLOCK_BADTID_ISZERO */ |
86 | | -#define shared_recursive_rwlock_cinit_write(self) (void)(shared_rwlock_cinit_write(&(self)->srr_lock), __shared_recursive_rwlock_setown(self)) |
87 | | -#define shared_recursive_rwlock_broadcast_for_fini(self) \ |
88 | | - shared_rwlock_broadcast_for_fini(&(self)->srr_lock) |
| 95 | +#define shared_recursive_rwlock_cinit_write(self) (void)(shared_rwlock_cinit_write(&(self)->srr_lock), __shared_recursive_rwlock_setown(self)) |
| 96 | +#define shared_recursive_rwlock_cinit_write_named(self, name) (void)(shared_rwlock_cinit_write_named(&(self)->srr_lock, name ".srr_lock"), __shared_recursive_rwlock_setown(self)) |
| 97 | +#define shared_recursive_rwlock_broadcast_for_fini(self) shared_rwlock_broadcast_for_fini(&(self)->srr_lock) |
| 98 | +#define DEFINE_SHARED_RECURSIVE_RWLOCK(self) struct shared_recursive_rwlock self = SHARED_RECURSIVE_RWLOCK_INIT(self) |
| 99 | +#define DEFINE_SHARED_RECURSIVE_RWLOCK_READ(self) struct shared_recursive_rwlock self = SHARED_RECURSIVE_RWLOCK_INIT_READ(self) |
| 100 | +#define DEFINE_SHARED_RECURSIVE_RWLOCK_NAMED(self, name) struct shared_recursive_rwlock self = SHARED_RECURSIVE_RWLOCK_INIT_NAMED(self, name) |
| 101 | +#define DEFINE_SHARED_RECURSIVE_RWLOCK_READ_NAMED(self, name) struct shared_recursive_rwlock self = SHARED_RECURSIVE_RWLOCK_INIT_READ_NAMED(self, name) |
89 | 102 |
|
90 | 103 | /* Check if reading/writing is possible, or a read/write lock is being held. */ |
91 | 104 | #define shared_recursive_rwlock_canread(self) (shared_rwlock_canread(&(self)->srr_lock) || __shared_recursive_rwlock_isown(self)) |
|
0 commit comments