From: Mathieu Desnoyers Date: Thu, 8 Jun 2017 00:19:13 +0000 (-0400) Subject: Cleanup: use mutex_lock() wrapper in rculfhash X-Git-Tag: v0.10.0~2 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=5ffcaeef59b55dbb6d3a0d952f87d8a7387edca3;p=userspace-rcu.git Cleanup: use mutex_lock() wrapper in rculfhash Fixes this coverity issue: *** CID 1375952: Error handling issues (CHECKED_RETURN) /src/rculfhash.c: 1950 in cds_lfht_resize() 1944 } 1945 1946 void cds_lfht_resize(struct cds_lfht *ht, unsigned long new_size) 1947 { 1948 resize_target_update_count(ht, new_size); 1949 CMM_STORE_SHARED(ht->resize_initiated, 1); >>> CID 1375952: Error handling issues (CHECKED_RETURN) >>> Calling "pthread_mutex_lock" without checking return value (as is done elsewhere 44 out of 50 times). 1950 pthread_mutex_lock(&ht->resize_mutex); 1951 _do_cds_lfht_resize(ht); 1952 pthread_mutex_unlock(&ht->resize_mutex); 1953 } 1954 1955 static Signed-off-by: Mathieu Desnoyers --- diff --git a/src/rculfhash.c b/src/rculfhash.c index 0bd1384..fed33e4 100644 --- a/src/rculfhash.c +++ b/src/rculfhash.c @@ -585,6 +585,37 @@ static void cds_lfht_resize_lazy_count(struct cds_lfht *ht, unsigned long size, unsigned long count); +static void mutex_lock(pthread_mutex_t *mutex) +{ + int ret; + +#ifndef DISTRUST_SIGNALS_EXTREME + ret = pthread_mutex_lock(mutex); + if (ret) + urcu_die(ret); +#else /* #ifndef DISTRUST_SIGNALS_EXTREME */ + while ((ret = pthread_mutex_trylock(mutex)) != 0) { + if (ret != EBUSY && ret != EINTR) + urcu_die(ret); + if (CMM_LOAD_SHARED(URCU_TLS(rcu_reader).need_mb)) { + cmm_smp_mb(); + _CMM_STORE_SHARED(URCU_TLS(rcu_reader).need_mb, 0); + cmm_smp_mb(); + } + (void) poll(NULL, 0, 10); + } +#endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */ +} + +static void mutex_unlock(pthread_mutex_t *mutex) +{ + int ret; + + ret = pthread_mutex_unlock(mutex); + if (ret) + urcu_die(ret); +} + static long nr_cpus_mask = -1; static long split_count_mask = -1; static int split_count_order = -1; @@ -1947,9 +1978,9 @@ void cds_lfht_resize(struct cds_lfht *ht, unsigned long new_size) { resize_target_update_count(ht, new_size); CMM_STORE_SHARED(ht->resize_initiated, 1); - pthread_mutex_lock(&ht->resize_mutex); + mutex_lock(&ht->resize_mutex); _do_cds_lfht_resize(ht); - pthread_mutex_unlock(&ht->resize_mutex); + mutex_unlock(&ht->resize_mutex); } static @@ -1960,9 +1991,9 @@ void do_resize_cb(struct urcu_work *work) struct cds_lfht *ht = resize_work->ht; ht->flavor->register_thread(); - pthread_mutex_lock(&ht->resize_mutex); + mutex_lock(&ht->resize_mutex); _do_cds_lfht_resize(ht); - pthread_mutex_unlock(&ht->resize_mutex); + mutex_unlock(&ht->resize_mutex); ht->flavor->unregister_thread(); poison_free(work); } @@ -2037,37 +2068,6 @@ void cds_lfht_resize_lazy_count(struct cds_lfht *ht, unsigned long size, __cds_lfht_resize_lazy_launch(ht); } -static void mutex_lock(pthread_mutex_t *mutex) -{ - int ret; - -#ifndef DISTRUST_SIGNALS_EXTREME - ret = pthread_mutex_lock(mutex); - if (ret) - urcu_die(ret); -#else /* #ifndef DISTRUST_SIGNALS_EXTREME */ - while ((ret = pthread_mutex_trylock(mutex)) != 0) { - if (ret != EBUSY && ret != EINTR) - urcu_die(ret); - if (CMM_LOAD_SHARED(URCU_TLS(rcu_reader).need_mb)) { - cmm_smp_mb(); - _CMM_STORE_SHARED(URCU_TLS(rcu_reader).need_mb, 0); - cmm_smp_mb(); - } - (void) poll(NULL, 0, 10); - } -#endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */ -} - -static void mutex_unlock(pthread_mutex_t *mutex) -{ - int ret; - - ret = pthread_mutex_unlock(mutex); - if (ret) - urcu_die(ret); -} - static void cds_lfht_before_fork(void *priv) { if (cds_lfht_workqueue_atfork_nesting++)