diff options
author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-08-24 18:48:17 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-08-24 18:48:17 +0200 |
commit | 103325209373f0aec818efd775f91243eb912a33 (patch) | |
tree | dfed42eeaea49ec839f867d89dda6a2cc69b560a /src/ipcpd/normal/fmgr.c | |
parent | f32db895e62152e1518fc5e184d19743d35e6cad (diff) | |
parent | 9c0c55198c2406fea6be189e1ec6b3ac3cc565fc (diff) | |
download | ouroboros-103325209373f0aec818efd775f91243eb912a33.tar.gz ouroboros-103325209373f0aec818efd775f91243eb912a33.zip |
Merged in dstaesse/ouroboros/be-ipcp-locks (pull request #221)
ipcpd: Revised locking
Diffstat (limited to 'src/ipcpd/normal/fmgr.c')
-rw-r--r-- | src/ipcpd/normal/fmgr.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/ipcpd/normal/fmgr.c b/src/ipcpd/normal/fmgr.c index 58ae1dc8..23d9514a 100644 --- a/src/ipcpd/normal/fmgr.c +++ b/src/ipcpd/normal/fmgr.c @@ -98,17 +98,16 @@ static void * fmgr_listen(void * o) char * ae_name; while (true) { - pthread_mutex_lock(&_ipcp->state_lock); - while (!(_ipcp->state == IPCP_ENROLLED || - _ipcp->state == IPCP_SHUTDOWN)) - pthread_cond_wait(&_ipcp->state_cond, - &_ipcp->state_lock); - - if (_ipcp->state == IPCP_SHUTDOWN) { - pthread_mutex_unlock(&_ipcp->state_lock); + ipcp_wait_state(_ipcp, IPCP_ENROLLED, NULL); + + pthread_rwlock_rdlock(&_ipcp->state_lock); + + if (ipcp_get_state(_ipcp) == IPCP_SHUTDOWN) { + pthread_rwlock_unlock(&_ipcp->state_lock); return 0; } - pthread_mutex_unlock(&_ipcp->state_lock); + + pthread_rwlock_unlock(&_ipcp->state_lock); fd = flow_accept(&ae_name); if (fd < 0) { |