diff options
author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-07-28 11:54:26 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-07-28 11:54:26 +0200 |
commit | e31d8dc166365cb501e86e832293b550bb277385 (patch) | |
tree | 251def449799fd5cce0f2c02883bcdab2a5dff7e /src/irmd/registry.c | |
parent | 0bce1fb10d7dbed4beebcdb8a083c5019be5907e (diff) | |
parent | 67de2ae5f7aee25c077096bd90a8d4cd3cdcf094 (diff) | |
download | ouroboros-e31d8dc166365cb501e86e832293b550bb277385.tar.gz ouroboros-e31d8dc166365cb501e86e832293b550bb277385.zip |
Merge remote-tracking branch 'upstream/be' into be-enrolment
Diffstat (limited to 'src/irmd/registry.c')
-rw-r--r-- | src/irmd/registry.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/irmd/registry.c b/src/irmd/registry.c index ab47fede..a1d1238d 100644 --- a/src/irmd/registry.c +++ b/src/irmd/registry.c @@ -114,6 +114,13 @@ static void reg_api_destroy(struct reg_api * i) free(i); } +static void cleanup_sleeper(void * o) { + struct reg_api * i = (struct reg_api *) o; + i->state = REG_I_NULL; + pthread_cond_signal(&i->state_cond); + pthread_mutex_unlock(&i->state_lock); +} + void reg_api_sleep(struct reg_api * i) { if (i == NULL) @@ -127,15 +134,11 @@ void reg_api_sleep(struct reg_api * i) i->state = REG_I_SLEEP; - pthread_cleanup_push((void(*)(void *)) pthread_mutex_unlock, - (void *) &i->state_lock); + pthread_cleanup_push(cleanup_sleeper, (void *) i); while (i->state == REG_I_SLEEP) pthread_cond_wait(&i->state_cond, &i->state_lock); - i->state = REG_I_NULL; - pthread_cond_signal(&i->state_cond); - pthread_cleanup_pop(true); } @@ -235,8 +238,6 @@ static void reg_entry_destroy(struct reg_entry * e) struct list_head * pos = NULL; struct list_head * n = NULL; - bool wait = true; - if (e == NULL) return; @@ -247,12 +248,6 @@ static void reg_entry_destroy(struct reg_entry * e) pthread_cond_broadcast(&e->state_cond); pthread_mutex_unlock(&e->state_lock); - while (wait) { - pthread_mutex_lock(&e->state_lock); - pthread_cond_broadcast(&e->state_cond); - pthread_mutex_unlock(&e->state_lock); - } - pthread_mutex_destroy(&e->state_lock); if (e->name != NULL) |