diff options
Diffstat (limited to 'src/ipcpd')
| -rw-r--r-- | src/ipcpd/normal/connmgr.c | 43 | ||||
| -rw-r--r-- | src/ipcpd/normal/enroll.c | 23 | ||||
| -rw-r--r-- | src/ipcpd/normal/main.c | 4 | 
3 files changed, 39 insertions, 31 deletions
| diff --git a/src/ipcpd/normal/connmgr.c b/src/ipcpd/normal/connmgr.c index c86beae8..b97d2b23 100644 --- a/src/ipcpd/normal/connmgr.c +++ b/src/ipcpd/normal/connmgr.c @@ -192,6 +192,27 @@ void connmgr_stop(void)          pthread_join(connmgr.acceptor, NULL);  } +static void destroy_ae(struct ae * ae) +{ +        struct list_head * p = NULL; +        struct list_head * h = NULL; + +        pthread_mutex_lock(&ae->conn_lock); + +        list_for_each_safe(p, h, &ae->conn_list) { +                struct ae_conn * e = list_entry(p, struct ae_conn, next); +                list_del(&e->next); +                free(e); +        } + +        pthread_mutex_unlock(&ae->conn_lock); + +        pthread_cond_destroy(&ae->conn_cond); +        pthread_mutex_destroy(&ae->conn_lock); + +        free(ae); +} +  void connmgr_fini(void)  {          struct list_head * p = NULL; @@ -201,7 +222,8 @@ void connmgr_fini(void)          list_for_each_safe(p, n, &connmgr.aes) {                  struct ae * e = list_entry(p, struct ae, next); -                connmgr_ae_destroy(e); +                list_del(&e->next); +                destroy_ae(e);          }          pthread_mutex_unlock(&connmgr.aes_lock); @@ -242,30 +264,15 @@ struct ae * connmgr_ae_create(struct conn_info info)  void connmgr_ae_destroy(struct ae * ae)  { -        struct list_head * p = NULL; -        struct list_head * n = NULL; -          assert(ae);          pthread_mutex_lock(&connmgr.aes_lock); -        pthread_mutex_lock(&ae->conn_lock); - -        list_for_each_safe(p, n, &ae->conn_list) { -                struct ae_conn * e = list_entry(p, struct ae_conn, next); -                list_del(&e->next); -                free(e); -        } - -        pthread_mutex_unlock(&ae->conn_lock); - -        pthread_cond_destroy(&ae->conn_cond); -        pthread_mutex_destroy(&ae->conn_lock);          list_del(&ae->next); -        pthread_mutex_unlock(&connmgr.aes_lock); +        destroy_ae(ae); -        free(ae); +        pthread_mutex_unlock(&connmgr.aes_lock);  }  int connmgr_alloc(struct ae *   ae, diff --git a/src/ipcpd/normal/enroll.c b/src/ipcpd/normal/enroll.c index bdf55fe8..7e15be11 100644 --- a/src/ipcpd/normal/enroll.c +++ b/src/ipcpd/normal/enroll.c @@ -73,15 +73,15 @@ static void * enroll_handle(void * o)          (void) o;          while (true) { -                if (connmgr_wait(enroll.ae, &conn)) { -                        log_err("Failed to get next connection."); -                        continue; -                } -                  cdap = cdap_create();                  if (cdap == NULL) {                          log_err("Failed to instantiate CDAP."); -                        flow_dealloc(conn.flow_info.fd); +                        continue; +                } + +                if (connmgr_wait(enroll.ae, &conn)) { +                        log_err("Failed to get next connection."); +                        cdap_destroy(cdap);                          continue;                  } @@ -179,17 +179,18 @@ int enroll_boot(char * dst_name)          char * members_ro = MEMBERS_PATH;          char * dif_ro     = DIF_PATH; -        if (connmgr_alloc(enroll.ae, dst_name, NULL, &conn)) { -                log_err("Failed to get connection."); -                return -1; -        } -          cdap = cdap_create();          if (cdap == NULL) {                  log_err("Failed to instantiate CDAP.");                  return -1;          } +        if (connmgr_alloc(enroll.ae, dst_name, NULL, &conn)) { +                log_err("Failed to get connection."); +                cdap_destroy(cdap); +                return -1; +        } +          if (cdap_add_flow(cdap, conn.flow_info.fd)) {                  log_warn("Failed to add flow to CDAP.");                  cdap_destroy(cdap); diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index 814a0c0b..398d6ee3 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -472,10 +472,10 @@ int main(int    argc,          rib_fini(); -        connmgr_fini(); -          enroll_fini(); +        connmgr_fini(); +          irm_unbind_api(getpid(), ipcpi.name);          ipcp_fini(); | 
