From f47b02df3f62974cdf1f37943e4fa42a43219216 Mon Sep 17 00:00:00 2001 From: kc5nra Date: Mon, 23 Mar 2015 21:28:01 -0500 Subject: [PATCH] deps-libff: Add proper ff_timer_init error checks --- deps/libff/libff/ff-timer.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/deps/libff/libff/ff-timer.c b/deps/libff/libff/ff-timer.c index 61064ca2e..2c74beb7f 100644 --- a/deps/libff/libff/ff-timer.c +++ b/deps/libff/libff/ff-timer.c @@ -77,20 +77,34 @@ static void *timer_thread(void *opaque) bool ff_timer_init(struct ff_timer *timer, ff_timer_callback callback, void *opaque) { - int ret; - memset(timer, 0, sizeof(struct ff_timer)); timer->abort = false; timer->callback = callback; timer->opaque = opaque; - pthread_mutexattr_init(&timer->mutexattr); - pthread_mutexattr_settype(&timer->mutexattr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&timer->mutex, &timer->mutexattr); - pthread_cond_init(&timer->cond, NULL); + if (pthread_mutexattr_init(&timer->mutexattr) != 0) + goto fail; + if (pthread_mutexattr_settype(&timer->mutexattr, + PTHREAD_MUTEX_RECURSIVE)) + goto fail1; + if (pthread_mutex_init(&timer->mutex, &timer->mutexattr) != 0) + goto fail1; + if (pthread_cond_init(&timer->cond, NULL) != 0) + goto fail2; - ret = pthread_create(&timer->timer_thread, NULL, timer_thread, timer); - return ret == 0; + if (pthread_create(&timer->timer_thread, NULL, timer_thread, timer) != 0) + goto fail3; + + return true; + +fail3: + pthread_cond_destroy(&timer->cond); +fail2: + pthread_mutex_destroy(&timer->mutex); +fail1: + pthread_mutexattr_destroy(&timer->mutexattr); +fail: + return false; } void ff_timer_free(struct ff_timer *timer)