summaryrefslogtreecommitdiff
path: root/src/ipcpd/local/main.c
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-08-10 10:46:47 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-08-10 10:46:47 +0200
commit7287e5649b122ec134f58e157e7908e2285dfa42 (patch)
tree27693eea2f2d1058eb55a17fbc4a313e0a983cc8 /src/ipcpd/local/main.c
parent3eb6acfd135cdfb82d19a4f445776ea2f13fd4e1 (diff)
downloadouroboros-7287e5649b122ec134f58e157e7908e2285dfa42.tar.gz
ouroboros-7287e5649b122ec134f58e157e7908e2285dfa42.zip
ipcpd: Fix locking problem in local IPCP
A lock was not being taken to check the state, but then it was released if the state was not IPCP_NULL, resulting in a segfault.
Diffstat (limited to 'src/ipcpd/local/main.c')
-rw-r--r--src/ipcpd/local/main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c
index 99580a45..a6076800 100644
--- a/src/ipcpd/local/main.c
+++ b/src/ipcpd/local/main.c
@@ -261,14 +261,14 @@ static int ipcp_local_bootstrap(struct dif_config * conf)
return -1;
}
+ pthread_rwlock_wrlock(&_ipcp->state_lock);
+
if (_ipcp->state != IPCP_INIT) {
pthread_rwlock_unlock(&_ipcp->state_lock);
LOG_ERR("IPCP in wrong state.");
return -1;
}
- pthread_rwlock_wrlock(&_ipcp->state_lock);
-
_ipcp->state = IPCP_ENROLLED;
pthread_create(&_ap_instance->sduloop,