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