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) |