diff options
-rw-r--r-- | src/ipcpd/local/main.c | 4 | ||||
-rw-r--r-- | src/irmd/main.c | 13 | ||||
-rw-r--r-- | src/tools/irm/irm_ipcp_bootstrap.c | 9 |
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; } |