summaryrefslogtreecommitdiff
path: root/src/irmd/main.c
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-08-26 16:52:45 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-08-26 16:52:45 +0200
commitda0739d8dea1235a047095c08cfe67871c3c216e (patch)
treed3a68ba74bd6cc5dc366649d6e29b15d697fc348 /src/irmd/main.c
parent84f0f1a64fa2beb00abf30d00072d4f818cf9bd4 (diff)
parent7fd43a33c5964fcf0f8de2efc9dbf27f8db25fc4 (diff)
downloadouroboros-da0739d8dea1235a047095c08cfe67871c3c216e.tar.gz
ouroboros-da0739d8dea1235a047095c08cfe67871c3c216e.zip
Merged in dstaesse/ouroboros/be-bugfixing (pull request #227)
Be bugfixing
Diffstat (limited to 'src/irmd/main.c')
-rw-r--r--src/irmd/main.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 5f793afd..cd939360 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -1548,6 +1548,20 @@ static void irm_destroy()
if (irmd->threadpool != NULL)
free(irmd->threadpool);
+ pthread_rwlock_wrlock(&irmd->flows_lock);
+
+ list_for_each_safe(p, h, &irmd->irm_flows) {
+ struct irm_flow * f = list_entry(p, struct irm_flow, next);
+ list_del(&f->next);
+ ipcp_flow_dealloc(f->n_1_api, f->port_id);
+ irm_flow_destroy(f);
+ }
+
+ close(irmd->sockfd);
+
+ if (unlink(IRM_SOCK_PATH))
+ LOG_DBG("Failed to unlink %s.", IRM_SOCK_PATH);
+
pthread_rwlock_wrlock(&irmd->reg_lock);
/* clear the lists */
list_for_each_safe(p, h, &irmd->ipcps) {
@@ -1585,14 +1599,6 @@ static void irm_destroy()
pthread_rwlock_unlock(&irmd->reg_lock);
- pthread_rwlock_wrlock(&irmd->flows_lock);
-
- list_for_each_safe(p, h, &irmd->irm_flows) {
- struct irm_flow * f = list_entry(p, struct irm_flow, next);
- list_del(&f->next);
- irm_flow_destroy(f);
- }
-
if (irmd->port_ids != NULL)
bmp_destroy(irmd->port_ids);
@@ -1604,11 +1610,6 @@ static void irm_destroy()
if (irmd->lf != NULL)
lockfile_destroy(irmd->lf);
- close(irmd->sockfd);
-
- if (unlink(IRM_SOCK_PATH))
- LOG_DBG("Failed to unlink %s.", IRM_SOCK_PATH);
-
pthread_rwlock_unlock(&irmd->state_lock);
pthread_rwlock_destroy(&irmd->reg_lock);