diff options
| author | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2016-12-06 14:31:49 +0000 | 
|---|---|---|
| committer | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2016-12-06 14:31:49 +0000 | 
| commit | 3068c438767fe54a1cced215e6df379a5c7ea8bf (patch) | |
| tree | 841b7c48c047afc1ad2bc44999158e0bdf657a9e /src/ipcpd | |
| parent | 82ae7959d21c654fe9fd14de504f47d18b1ebcfc (diff) | |
| parent | a4031fa3d1eb63c1ff83ba37e5e89d6b1a7d5d04 (diff) | |
| download | ouroboros-3068c438767fe54a1cced215e6df379a5c7ea8bf.tar.gz ouroboros-3068c438767fe54a1cced215e6df379a5c7ea8bf.zip | |
Merged in sandervrijders/ouroboros/be-fix-normal-shutdown (pull request #320)
ipcpd: normal: Fix errors on IPCP shutdown
Diffstat (limited to 'src/ipcpd')
| -rw-r--r-- | src/ipcpd/normal/fmgr.c | 6 | ||||
| -rw-r--r-- | src/ipcpd/normal/main.c | 3 | ||||
| -rw-r--r-- | src/ipcpd/normal/pol/flat.c | 18 | ||||
| -rw-r--r-- | src/ipcpd/normal/ribmgr.c | 9 | 
4 files changed, 19 insertions, 17 deletions
| diff --git a/src/ipcpd/normal/fmgr.c b/src/ipcpd/normal/fmgr.c index 82163aef..44b73627 100644 --- a/src/ipcpd/normal/fmgr.c +++ b/src/ipcpd/normal/fmgr.c @@ -143,7 +143,7 @@ static void * fmgr_nm1_acceptor(void * o)                  fd = flow_accept(&ae_name, &qs);                  if (fd < 0) { -                        LOG_ERR("Failed to accept flow."); +                        LOG_WARN("Flow accept failed.");                          continue;                  } @@ -390,8 +390,8 @@ int fmgr_fini()          for (i = 0; i < IRMD_MAX_FLOWS; i++) {                  if (fmgr.nm1_flows[i] == NULL)                          continue; -                if (ribmgr_remove_flow(fmgr.nm1_flows[i]->fd)) -                    LOG_ERR("Failed to remove management flow."); +                flow_dealloc(fmgr.nm1_flows[i]->fd); +                free(fmgr.nm1_flows[i]);          }          pthread_rwlock_destroy(&fmgr.nm1_flows_lock); diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index 64138838..34cbc6b9 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -248,9 +248,6 @@ int main(int argc, char * argv[])          if (frct_fini())                  LOG_ERR("Failed to finalize FRCT."); -        if (dir_fini()) -                LOG_ERR("Failed to finalize directory."); -          close_logfile();          ap_fini(); diff --git a/src/ipcpd/normal/pol/flat.c b/src/ipcpd/normal/pol/flat.c index 06958222..7d489dd5 100644 --- a/src/ipcpd/normal/pol/flat.c +++ b/src/ipcpd/normal/pol/flat.c @@ -163,15 +163,17 @@ int flat_init(void)                  return -1;          } -        if (ro_create(name, &rattr, NULL, 0)) { -                LOG_ERR("Could not create RO."); -                pathname_destroy(name); -                pthread_cond_destroy(&flat.cond); -                pthread_mutex_destroy(&flat.lock); -                ro_unsubscribe(flat.sid); -                return -1; +        if (!ro_exists(name)) { +                rattr.enrol_sync = true; +                if (ro_create(name, &rattr, NULL, 0)) { +                        LOG_ERR("Could not create RO."); +                        pathname_destroy(name); +                        pthread_cond_destroy(&flat.cond); +                        pthread_mutex_destroy(&flat.lock); +                        ro_unsubscribe(flat.sid); +                        return -1; +                }          } -          pathname_destroy(name);          return 0; diff --git a/src/ipcpd/normal/ribmgr.c b/src/ipcpd/normal/ribmgr.c index 02cbbbfd..cbf68d0c 100644 --- a/src/ipcpd/normal/ribmgr.c +++ b/src/ipcpd/normal/ribmgr.c @@ -1644,6 +1644,7 @@ int ro_subscribe(const char *        name,                   struct ro_sub_ops * ops)  {          struct ro_sub * sub; +        int sid;          assert(name);          assert(ops); @@ -1664,19 +1665,21 @@ int ro_subscribe(const char *        name,          pthread_mutex_lock(&rib.subs_lock); -        sub->sid = bmp_allocate(rib.sids); -        if (sub->sid < 0) { +        sid = bmp_allocate(rib.sids); +        if (sid < 0) {                  pthread_mutex_unlock(&rib.subs_lock);                  free(sub->name);                  free(sub);                  LOG_ERR("Failed to get sub id."); +                return -1;          } +        sub->sid = sid;          list_add(&sub->next, &rib.subs);          pthread_mutex_unlock(&rib.subs_lock); -        return 0; +        return sid;  }  int ro_unsubscribe(int sid) | 
