summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2016-08-10 12:31:14 +0200
committerdimitri staessens <[email protected]>2016-08-10 12:31:14 +0200
commit0ec8f7b6d977a9cc469445d4990d432253f979d9 (patch)
tree33ca5c8a7a237952b8c037596ecdd874b518a6fb /src
parent31b2edb845628e1d6b1b5b17821b060c152679af (diff)
parent6e854784ebc67af1eb8cdc3209f574e0af5e574d (diff)
downloadouroboros-0ec8f7b6d977a9cc469445d4990d432253f979d9.tar.gz
ouroboros-0ec8f7b6d977a9cc469445d4990d432253f979d9.zip
Merged in sandervrijders/ouroboros/be-bootstrap (pull request #199)
Several small fixes and enhancements
Diffstat (limited to 'src')
-rw-r--r--src/ipcpd/local/main.c4
-rw-r--r--src/irmd/main.c13
-rw-r--r--src/tools/irm/irm_ipcp_bootstrap.c9
3 files changed, 22 insertions, 4 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,
diff --git a/src/irmd/main.c b/src/irmd/main.c
index f9f34416..947645ca 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -1337,6 +1337,8 @@ void * irm_flow_cleaner()
struct timespec now;
struct list_head * pos = NULL;
struct list_head * n = NULL;
+ struct list_head * h = NULL;
+ struct list_head * t = NULL;
struct timespec timeout = {IRMD_CLEANUP_TIMER / BILLION,
IRMD_CLEANUP_TIMER % BILLION};
@@ -1415,6 +1417,17 @@ void * irm_flow_cleaner()
LOG_INFO("Spawned process %d terminated "
"with exit status %d.",
api->api, status);
+
+ list_for_each_safe(h, t, &irmd->ipcps) {
+ struct ipcp_entry * e =
+ list_entry(h, struct ipcp_entry,
+ next);
+ if (e->api == api->api) {
+ list_del(&e->next);
+ ipcp_entry_destroy(e);
+ }
+ }
+
list_del(&api->next);
free(api);
}
diff --git a/src/tools/irm/irm_ipcp_bootstrap.c b/src/tools/irm/irm_ipcp_bootstrap.c
index d5fa97da..34c5d223 100644
--- a/src/tools/irm/irm_ipcp_bootstrap.c
+++ b/src/tools/irm/irm_ipcp_bootstrap.c
@@ -184,12 +184,17 @@ int do_bootstrap_ipcp(int argc, char ** argv)
}
len = irm_list_ipcps(name, &apis);
- if (len <= 0)
- return -1;
+ if (len <= 0) {
+ if (!irm_create_ipcp(name, conf.type))
+ return -1;
+ len = irm_list_ipcps(name, &apis);
+ }
for (i = 0; i < len; i++)
if (irm_bootstrap_ipcp(apis[i], &conf))
return -1;
+ free(apis);
+
return 0;
}