From f5054cc7ee058cff2226994036949e77725ae454 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Mon, 13 Aug 2018 18:00:43 +0200 Subject: icmpd cleanup --- icmpd.c | 13 ++++++------- icmpd.h | 10 ++++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/icmpd.c b/icmpd.c index d2afb88..6acb2da 100644 --- a/icmpd.c +++ b/icmpd.c @@ -43,11 +43,10 @@ struct icmpd { }; // Global state -bool thread_running = false; -struct mt_mutex thread_mutex; // protecting these global values -struct mt_thread thread; -int thread_in, thread_out; -int host_in, host_out; +static bool thread_running = false; +static struct mt_thread thread; +static int thread_in, thread_out; +static int host_in, host_out; // Arguments to messages are listed in comments. @@ -240,6 +239,8 @@ static void* thread_entry(void *arg) { assert(found); mt_mutex_destroy(&d->mut); + close(d->signal_out); + close(d->signal_in); free(d); break; } @@ -477,8 +478,6 @@ static void spawn_icmpd_thread(void) { host_out = pp[1]; thread_in = pp[0]; - mt_mutex_init(&thread_mutex); - mt_thread_create(&thread, thread_entry, NULL); struct msg_in msg = recv_message(host_in); diff --git a/icmpd.h b/icmpd.h index 2c46788..e5daf7b 100644 --- a/icmpd.h +++ b/icmpd.h @@ -13,6 +13,16 @@ struct icmpd_received { }; +// The interface exposed here is NOT thread-safe. Having multiple threads in +// in the same process working with icmpd is unsafe, since internal communication +// assumes one calling thread. + + +// This functions as a "connection" with another party. A server should create +// a new connection for each client it communicates with (in addition to a +// single possible client_addr=0 connection for receiving connection requests), +// and likewise a client should create a new connection for each server it +// communicates with. struct icmpd; // Pass 0 as client_addr to listen for messages from any IP (this channel -- cgit v1.2.3