From 7c10101e83d99e9cfa96d545b38420e3cb1f98fc Mon Sep 17 00:00:00 2001 From: Christian Mehlis <mehlis@inf.fu-berlin.de> Date: Sun, 6 Jul 2014 17:23:16 +0200 Subject: [PATCH] ccnl: prevent race condition on teardown --- sys/net/ccn_lite/ccn-lite-relay.c | 8 ++++++-- sys/net/ccn_lite/ccnl-core.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/net/ccn_lite/ccn-lite-relay.c b/sys/net/ccn_lite/ccn-lite-relay.c index 700f29e0f3..44047aad99 100644 --- a/sys/net/ccn_lite/ccn-lite-relay.c +++ b/sys/net/ccn_lite/ccn-lite-relay.c @@ -413,19 +413,23 @@ void ccnl_riot_relay_start(void) ccnl_core_cleanup(theRelay); + mutex_lock(&theRelay->stop_lock); ccnl_free(theRelay); } void ccnl_riot_relay_helper_start(void) { unsigned long us = CCNL_CHECK_RETRANSMIT_USEC; + mutex_lock(&theRelay->stop_lock); while (!theRelay->halt_flag) { - vtimer_usleep(us); - mutex_lock(&theRelay->global_lock); ccnl_run_events(); mutex_unlock(&theRelay->global_lock); + + vtimer_usleep(us); } + + mutex_unlock(&theRelay->stop_lock); } // eof diff --git a/sys/net/ccn_lite/ccnl-core.h b/sys/net/ccn_lite/ccnl-core.h index 926d2b3890..0f2d6c777b 100644 --- a/sys/net/ccn_lite/ccnl-core.h +++ b/sys/net/ccn_lite/ccnl-core.h @@ -107,6 +107,7 @@ struct ccnl_relay_s { int riot_pid; int riot_helper_pid; mutex_t global_lock; + mutex_t stop_lock; }; struct ccnl_buf_s { -- GitLab