diff options
| -rw-r--r-- | src/irmd/main.c | 4 | ||||
| -rw-r--r-- | src/lib/dev.c | 10 | ||||
| -rw-r--r-- | src/lib/shm_flow_set.c | 4 | ||||
| -rw-r--r-- | src/tools/irm/irm.c | 14 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind.c | 2 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp.c | 12 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind.c | 2 | 
7 files changed, 27 insertions, 21 deletions
| diff --git a/src/irmd/main.c b/src/irmd/main.c index 4dee4b91..390681a8 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1993,7 +1993,7 @@ void * mainloop(void * o)  static int irm_create(void)  { -        struct stat st = {0}; +        struct stat st;          struct timeval timeout = {(IRMD_ACCEPT_TIMEOUT / 1000),                                    (IRMD_ACCEPT_TIMEOUT % 1000) * 1000}; @@ -2001,6 +2001,8 @@ static int irm_create(void)          if (irmd == NULL)                  return -ENOMEM; +        memset(&st, 0, sizeof(st)); +          irmd->state = IRMD_NULL;          if (pthread_rwlock_init(&irmd->state_lock, NULL)) { diff --git a/src/lib/dev.c b/src/lib/dev.c index 86a5913e..cac3ca37 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -276,7 +276,6 @@ void ap_fini()          bmp_destroy(ai.fds);          bmp_destroy(ai.fqueues);          shm_flow_set_destroy(ai.fqset); -        shm_rdrbuff_close(ai.rdrb);          if (ai.daf_name != NULL)                  free(ai.daf_name); @@ -303,6 +302,8 @@ void ap_fini()                  pthread_cond_destroy(&ai.ports[i].state_cond);          } +        shm_rdrbuff_close(ai.rdrb); +          free(ai.flows);          free(ai.ports); @@ -699,7 +700,7 @@ ssize_t flow_write(int fd, void * buf, size_t count)                  return -ENOTALLOC;          } -        if (ai.flows[fd].oflags & FLOW_O_RDONLY) { +        if ((ai.flows[fd].oflags & FLOW_O_ACCMODE) == FLOW_O_RDONLY) {                  pthread_rwlock_unlock(&ai.flows_lock);                  pthread_rwlock_unlock(&ai.data_lock);                  return -EPERM; @@ -960,12 +961,13 @@ int flow_event_wait(struct flow_set *       set,          if (fq->fqsize > 0)                  return 0; +        assert(!fq->next); +          ret = shm_flow_set_wait(ai.fqset, set->idx, fq->fqueue, timeout);          if (ret == -ETIMEDOUT)                  return -ETIMEDOUT;          fq->fqsize = ret; -        fq->next   = 0;          return 0;  } @@ -1257,7 +1259,7 @@ int ipcp_flow_write(int fd, struct shm_du_buff * sdb)          pthread_rwlock_rdlock(&ai.data_lock);          pthread_rwlock_rdlock(&ai.flows_lock); -        if (ai.flows[fd].oflags & FLOW_O_RDONLY) { +        if ((ai.flows[fd].oflags & FLOW_O_ACCMODE) == FLOW_O_RDONLY) {                  pthread_rwlock_unlock(&ai.flows_lock);                  pthread_rwlock_unlock(&ai.data_lock);                  return -EPERM; diff --git a/src/lib/shm_flow_set.c b/src/lib/shm_flow_set.c index f68773aa..3b1af83f 100644 --- a/src/lib/shm_flow_set.c +++ b/src/lib/shm_flow_set.c @@ -356,6 +356,7 @@ ssize_t shm_flow_set_wait(const struct shm_flow_set * shm_set,          assert(shm_set);          assert(idx < AP_MAX_FQUEUES); +        assert(fqueue);  #ifdef __APPLE__          pthread_mutex_lock(shm_set->lock); @@ -397,10 +398,11 @@ ssize_t shm_flow_set_wait(const struct shm_flow_set * shm_set,                  memcpy(fqueue,                         fqueue_ptr(shm_set, idx),                         shm_set->heads[idx] * sizeof(int)); +                ret = shm_set->heads[idx];                  shm_set->heads[idx] = 0;          }          pthread_cleanup_pop(true); -        return 0; +        return ret;  } diff --git a/src/tools/irm/irm.c b/src/tools/irm/irm.c index be758098..320ce97a 100644 --- a/src/tools/irm/irm.c +++ b/src/tools/irm/irm.c @@ -47,13 +47,13 @@ static const struct cmd {          const char * cmd;          int (* func)(int argc, char ** argv);  } cmds[] = { -        { "ipcp",            ipcp_cmd }, -        { "bind",            bind_cmd }, -        { "unbind",          unbind_cmd }, -        { "register",        do_register }, -        { "unregister",      do_unregister }, -        { "help",            do_help }, -        { 0 } +        { "ipcp",       ipcp_cmd }, +        { "bind",       bind_cmd }, +        { "unbind",     unbind_cmd }, +        { "register",   do_register }, +        { "unregister", do_unregister }, +        { "help",       do_help }, +        { NULL,         NULL }  };  static int do_cmd(const char * argv0, diff --git a/src/tools/irm/irm_bind.c b/src/tools/irm/irm_bind.c index bb441573..aafa2f75 100644 --- a/src/tools/irm/irm_bind.c +++ b/src/tools/irm/irm_bind.c @@ -51,7 +51,7 @@ static const struct cmd {          { "api",  do_bind_api },          { "ipcp", do_bind_ipcp },          { "help", do_help }, -        { 0 } +        { NULL,   NULL }  };  static int do_cmd(const char * argv0, diff --git a/src/tools/irm/irm_ipcp.c b/src/tools/irm/irm_ipcp.c index 795281bb..004bbbe0 100644 --- a/src/tools/irm/irm_ipcp.c +++ b/src/tools/irm/irm_ipcp.c @@ -45,12 +45,12 @@ static const struct cmd {          const char * cmd;          int (* func)(int argc, char ** argv);  } cmds[] = { -        { "create",     do_create_ipcp }, -        { "destroy",    do_destroy_ipcp }, -        { "bootstrap",  do_bootstrap_ipcp }, -        { "enroll",     do_enroll_ipcp }, -        { "help",       do_help }, -        { 0 } +        { "create",    do_create_ipcp }, +        { "destroy",   do_destroy_ipcp }, +        { "bootstrap", do_bootstrap_ipcp }, +        { "enroll",    do_enroll_ipcp }, +        { "help",      do_help }, +        { NULL,        NULL }  };  static int do_cmd(const char * argv0, diff --git a/src/tools/irm/irm_unbind.c b/src/tools/irm/irm_unbind.c index 5d167e1c..a6b27907 100644 --- a/src/tools/irm/irm_unbind.c +++ b/src/tools/irm/irm_unbind.c @@ -51,7 +51,7 @@ static const struct cmd {          { "api",  do_unbind_api },          { "ipcp", do_unbind_ipcp },          { "help", do_help }, -        { 0 } +        { NULL,   NULL }  };  static int do_cmd(const char * argv0, int argc, char ** argv) | 
