summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/irmd/main.c4
-rw-r--r--src/lib/dev.c10
-rw-r--r--src/lib/shm_flow_set.c4
-rw-r--r--src/tools/irm/irm.c14
-rw-r--r--src/tools/irm/irm_bind.c2
-rw-r--r--src/tools/irm/irm_ipcp.c12
-rw-r--r--src/tools/irm/irm_unbind.c2
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)