summaryrefslogtreecommitdiff
path: root/src/ipcpd/normal/ribmgr.c
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-03-25 11:06:25 +0000
committerSander Vrijders <[email protected]>2017-03-25 11:06:25 +0000
commit1d9061666656ba1cc5a5c72fcc564a3a45b2dd8a (patch)
tree8f46da795657fc2e461c61ec3f4180e32fd68151 /src/ipcpd/normal/ribmgr.c
parent9cf1bc3d88334249092cb30eb9c789d870e6768b (diff)
parent006da084997e7a27eac5f037356e269fedac00bb (diff)
downloadouroboros-1d9061666656ba1cc5a5c72fcc564a3a45b2dd8a.tar.gz
ouroboros-1d9061666656ba1cc5a5c72fcc564a3a45b2dd8a.zip
Merged in dstaesse/ouroboros/be-cdap (pull request #423)
lib: Fix invoke_ids and failure handling in CDAP
Diffstat (limited to 'src/ipcpd/normal/ribmgr.c')
-rw-r--r--src/ipcpd/normal/ribmgr.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/ipcpd/normal/ribmgr.c b/src/ipcpd/normal/ribmgr.c
index 2696026a..772269ae 100644
--- a/src/ipcpd/normal/ribmgr.c
+++ b/src/ipcpd/normal/ribmgr.c
@@ -168,6 +168,7 @@ static void * reader(void * o)
break;
case -EFAULT:
log_warn("Hash mismatch, not in sync.");
+ free(data);
break;
default:
log_warn("Error unpacking %s.", name);
@@ -194,6 +195,7 @@ static void * reader(void * o)
break;
case -EFAULT:
log_warn("Hash mismatch, not yet in sync.");
+ free(data);
break;
default:
log_warn("Error unpacking %s.", name);
@@ -223,7 +225,6 @@ static void * reader(void * o)
log_err("Failed to send CDAP reply.");
continue;
}
-
break;
case CDAP_START:
case CDAP_STOP:
@@ -343,18 +344,9 @@ int ribmgr_init(void)
return -1;
}
- ribmgr.gam = gam_create(pg, ribmgr.nbs, ribmgr.ae);
- if (ribmgr.gam == NULL) {
- log_err("Failed to create gam.");
- connmgr_ae_destroy(ribmgr.ae);
- nbs_destroy(ribmgr.nbs);
- return -1;
- }
-
ribmgr.cdap = cdap_create();
if (ribmgr.cdap == NULL) {
log_err("Failed to create CDAP instance.");
- gam_destroy(ribmgr.gam);
connmgr_ae_destroy(ribmgr.ae);
nbs_destroy(ribmgr.nbs);
return -1;
@@ -364,7 +356,16 @@ int ribmgr_init(void)
if (nbs_reg_notifier(ribmgr.nbs, &ribmgr.nb_notifier)) {
log_err("Failed to register notifier.");
cdap_destroy(ribmgr.cdap);
- gam_destroy(ribmgr.gam);
+ connmgr_ae_destroy(ribmgr.ae);
+ nbs_destroy(ribmgr.nbs);
+ return -1;
+ }
+
+ ribmgr.gam = gam_create(pg, ribmgr.nbs, ribmgr.ae);
+ if (ribmgr.gam == NULL) {
+ log_err("Failed to create gam.");
+ nbs_unreg_notifier(ribmgr.nbs, &ribmgr.nb_notifier);
+ cdap_destroy(ribmgr.cdap);
connmgr_ae_destroy(ribmgr.ae);
nbs_destroy(ribmgr.nbs);
return -1;