MINOR: deinit: always deinit the init_mutex on failed initialization
The init_mutex was not unlocked in case an error is encountered during
a thread initialization, and the polling loop was aborted during startup.
In practise it does not have any observable effect since an explicit
exit() is placed there, but it could confuse some debugging tools or
some static analysers, so let's release it as expected.
This addresses issue #1326.
diff --git a/src/haproxy.c b/src/haproxy.c
index d6aeed9..79d457a 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -2739,6 +2739,7 @@
list_for_each_entry(ptaf, &per_thread_alloc_list, list) {
if (!ptaf->fct()) {
ha_alert("failed to allocate resources for thread %u.\n", tid);
+ pthread_mutex_unlock(&init_mutex);
exit(1);
}
}
@@ -2750,6 +2751,7 @@
list_for_each_entry(ptif, &per_thread_init_list, list) {
if (!ptif->fct()) {
ha_alert("failed to initialize thread %u.\n", tid);
+ pthread_mutex_unlock(&init_mutex);
exit(1);
}
}