summaryrefslogtreecommitdiff
path: root/src/ipcpd/unicast/fa.c
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2020-10-10 14:59:14 +0200
committerSander Vrijders <sander@ouroboros.rocks>2020-10-11 14:09:44 +0200
commit31e2ab31a61029130fd8be4b2e8abe35bdc19659 (patch)
treee86f66e838071c837189c98c9b400f8b87258b45 /src/ipcpd/unicast/fa.c
parent3aec660e814f470cc9453e69231cbe3102fd2a4c (diff)
downloadouroboros-31e2ab31a61029130fd8be4b2e8abe35bdc19659.tar.gz
ouroboros-31e2ab31a61029130fd8be4b2e8abe35bdc19659.zip
ipcpd: Fix condition variable in flow allocator
The condition variable was not initialized correctly and using the wrong clock for pthread_cond_timedwait. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/fa.c')
-rw-r--r--src/ipcpd/unicast/fa.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/ipcpd/unicast/fa.c b/src/ipcpd/unicast/fa.c
index e0727e85..e154d785 100644
--- a/src/ipcpd/unicast/fa.c
+++ b/src/ipcpd/unicast/fa.c
@@ -274,7 +274,8 @@ static void * fa_handle_packet(void * o)
int fa_init(void)
{
- int i;
+ pthread_condattr_t cattr;
+ int i;
for (i = 0; i < PROG_MAX_FLOWS; ++i)
destroy_conn(i);
@@ -285,9 +286,17 @@ int fa_init(void)
if (pthread_mutex_init(&fa.mtx, NULL))
goto fail_mtx;
- if (pthread_cond_init(&fa.cond, NULL))
+ if (pthread_condattr_init(&cattr))
+ goto fail_cattr;
+
+#ifndef __APPLE__
+ pthread_condattr_setclock(&cattr, PTHREAD_COND_CLOCK);
+#endif
+ if (pthread_cond_init(&fa.cond, &cattr))
goto fail_cond;
+ pthread_condattr_destroy(&cattr);
+
list_head_init(&fa.cmds);
fa.fd = dt_reg_comp(&fa, &fa_post_packet, FA);
@@ -295,6 +304,8 @@ int fa_init(void)
return 0;
fail_cond:
+ pthread_condattr_destroy(&cattr);
+ fail_cattr:
pthread_mutex_destroy(&fa.mtx);
fail_mtx:
pthread_rwlock_destroy(&fa.flows_lock);