X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Furcu-bp.c;h=f886ec40763120847d54aef7a5d61a7a18b807d8;hb=90f72b8c054ca4e3b4b45f630549c784e26ce79a;hp=83df1399cd382280e8cedc67a2bf0c854098fa2c;hpb=f99c6e92aaa1582e6cd19d93d44d91d968f39aa7;p=userspace-rcu.git diff --git a/src/urcu-bp.c b/src/urcu-bp.c index 83df139..f886ec4 100644 --- a/src/urcu-bp.c +++ b/src/urcu-bp.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -37,6 +36,7 @@ #include #include +#include #include #include #include @@ -80,7 +80,7 @@ void *mremap_wrapper(void *old_address __attribute__((unused)), size_t new_size __attribute__((unused)), int flags) { - assert(!(flags & MREMAP_MAYMOVE)); + urcu_posix_assert(!(flags & MREMAP_MAYMOVE)); return MAP_FAILED; } @@ -121,6 +121,7 @@ static void __attribute__((constructor)) _urcu_bp_init(void); static void __attribute__((destructor)) urcu_bp_exit(void); +static void urcu_call_rcu_exit(void); #ifndef CONFIG_RCU_FORCE_SYS_MEMBARRIER int urcu_bp_has_sys_membarrier; @@ -277,9 +278,9 @@ void urcu_bp_synchronize_rcu(void) int ret; ret = sigfillset(&newmask); - assert(!ret); + urcu_posix_assert(!ret); ret = pthread_sigmask(SIG_BLOCK, &newmask, &oldmask); - assert(!ret); + urcu_posix_assert(!ret); mutex_lock(&rcu_gp_lock); @@ -345,7 +346,7 @@ out: mutex_unlock(&rcu_registry_lock); mutex_unlock(&rcu_gp_lock); ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL); - assert(!ret); + urcu_posix_assert(!ret); } /* @@ -383,7 +384,7 @@ void expand_arena(struct registry_arena *arena) /* No chunk. */ if (cds_list_empty(&arena->chunk_list)) { - assert(ARENA_INIT_ALLOC >= + urcu_posix_assert(ARENA_INIT_ALLOC >= sizeof(struct registry_chunk) + sizeof(struct rcu_reader)); new_chunk_len = ARENA_INIT_ALLOC; @@ -413,7 +414,7 @@ void expand_arena(struct registry_arena *arena) new_chunk_len, 0); if (new_chunk != MAP_FAILED) { /* Should not have moved. */ - assert(new_chunk == last_chunk); + urcu_posix_assert(new_chunk == last_chunk); memset((char *) last_chunk + old_chunk_len, 0, new_chunk_len - old_chunk_len); last_chunk->data_len = @@ -484,7 +485,7 @@ void add_thread(void) /* Add to registry */ rcu_reader_reg->tid = pthread_self(); - assert(rcu_reader_reg->ctr == 0); + urcu_posix_assert(rcu_reader_reg->ctr == 0); cds_list_add(&rcu_reader_reg->node, ®istry); /* * Reader threads are pointing to the reader registry. This is @@ -655,6 +656,8 @@ void _urcu_bp_init(void) static void urcu_bp_exit(void) { + urcu_call_rcu_exit(); + mutex_lock(&init_lock); if (!--urcu_bp_refcount) { struct registry_chunk *chunk, *tmp; @@ -685,9 +688,9 @@ void urcu_bp_before_fork(void) int ret; ret = sigfillset(&newmask); - assert(!ret); + urcu_posix_assert(!ret); ret = pthread_sigmask(SIG_BLOCK, &newmask, &oldmask); - assert(!ret); + urcu_posix_assert(!ret); mutex_lock(&rcu_gp_lock); mutex_lock(&rcu_registry_lock); saved_fork_signal_mask = oldmask; @@ -702,7 +705,7 @@ void urcu_bp_after_fork_parent(void) mutex_unlock(&rcu_registry_lock); mutex_unlock(&rcu_gp_lock); ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL); - assert(!ret); + urcu_posix_assert(!ret); } /* @@ -738,7 +741,7 @@ void urcu_bp_after_fork_child(void) mutex_unlock(&rcu_registry_lock); mutex_unlock(&rcu_gp_lock); ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL); - assert(!ret); + urcu_posix_assert(!ret); } void *urcu_bp_dereference_sym(void *p) @@ -769,3 +772,4 @@ DEFINE_RCU_FLAVOR(rcu_flavor); #include "urcu-call-rcu-impl.h" #include "urcu-defer-impl.h" +#include "urcu-poll-impl.h"