From e8b2e9c7d5edd849e80e5b902f27d0d38c650f8b Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 15 Mar 2022 12:13:30 -0400 Subject: [PATCH] more checks against errors Signed-off-by: Steffen Vogel Signed-off-by: Niklas Eiling Co-authored-by: Niklas Eiling --- lib/nodes/infiniband.cpp | 4 +++- lib/nodes/rtp.cpp | 7 +++++-- lib/queue_signalled.cpp | 38 +++++++++++++++++++++++++++++--------- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/nodes/infiniband.cpp b/lib/nodes/infiniband.cpp index 8dcb407cd..8b11ceaad 100644 --- a/lib/nodes/infiniband.cpp +++ b/lib/nodes/infiniband.cpp @@ -676,7 +676,9 @@ int villas::node::ib_stop(NodeCompat *n) { n->logger->debug("Called rdma_disconnect"); } else { - pthread_cancel(ib->conn.rdma_cm_event_thread); + ret = pthread_cancel(ib->conn.rdma_cm_event_thread); + if (ret) + throw RuntimeError("Failed to cancel thread"); n->logger->debug( "Called pthread_cancel() on communication management thread."); diff --git a/lib/nodes/rtp.cpp b/lib/nodes/rtp.cpp index 503978691..4e028b853 100644 --- a/lib/nodes/rtp.cpp +++ b/lib/nodes/rtp.cpp @@ -470,8 +470,11 @@ int villas::node::rtp_type_start(villas::node::SuperNode *sn) { int villas::node::rtp_type_stop() { int ret; - // Join worker thread - pthread_kill(re_pthread, SIGUSR1); + /* Join worker thread */ + ret = pthread_kill(re_pthread, SIGUSR1); + if (ret) + throw RuntimeError("Failed to kill thread"); + ret = pthread_join(re_pthread, nullptr); if (ret) throw RuntimeError("Error joining rtp node type pthread"); diff --git a/lib/queue_signalled.cpp b/lib/queue_signalled.cpp index 0b3ec44f4..2f38ef0b8 100644 --- a/lib/queue_signalled.cpp +++ b/lib/queue_signalled.cpp @@ -53,21 +53,41 @@ int villas::node::queue_signalled_init(struct CQueueSignalled *qs, size_t size, pthread_condattr_t cvattr; pthread_mutexattr_t mtattr; - pthread_mutexattr_init(&mtattr); - pthread_condattr_init(&cvattr); + ret = pthread_mutexattr_init(&mtattr); + if (ret) + return ret; + + ret = pthread_condattr_init(&cvattr); + if (ret) + return ret; if (flags & (int)QueueSignalledFlags::PROCESS_SHARED) { - pthread_mutexattr_setpshared(&mtattr, PTHREAD_PROCESS_SHARED); - pthread_condattr_setpshared(&cvattr, PTHREAD_PROCESS_SHARED); + ret = pthread_mutexattr_setpshared(&mtattr, PTHREAD_PROCESS_SHARED); + if (ret) + return ret; + + ret = pthread_condattr_setpshared(&cvattr, PTHREAD_PROCESS_SHARED); + if (ret) + return ret; } - pthread_mutex_init(&qs->pthread.mutex, &mtattr); - pthread_cond_init(&qs->pthread.ready, &cvattr); + ret = pthread_mutex_init(&qs->pthread.mutex, &mtattr); + if (ret) + return ret; - pthread_mutexattr_destroy(&mtattr); - pthread_condattr_destroy(&cvattr); + ret = pthread_cond_init(&qs->pthread.ready, &cvattr); + if (ret) + return ret; + + ret = pthread_mutexattr_destroy(&mtattr); + if (ret) + return ret; + + ret = pthread_condattr_destroy(&cvattr); + if (ret) + return ret; } else if (qs->mode == QueueSignalledMode::POLLING) { - // Nothing todo + /* Nothing todo */ } #ifdef HAS_EVENTFD else if (qs->mode == QueueSignalledMode::EVENTFD) {