diff options
Diffstat (limited to 'src/lib/dev.c')
-rw-r--r-- | src/lib/dev.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c index c349846f..86a5913e 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -285,7 +285,7 @@ void ap_fini() for (i = 0; i < AP_MAX_FLOWS; ++i) { if (ai.flows[i].tx_rb != NULL) { - int idx; + ssize_t idx; while ((idx = shm_rbuff_read(ai.flows[i].rx_rb)) >= 0) shm_rdrbuff_remove(ai.rdrb, idx); shm_rbuff_close(ai.flows[i].rx_rb); @@ -758,7 +758,7 @@ ssize_t flow_write(int fd, void * buf, size_t count) ssize_t flow_read(int fd, void * buf, size_t count) { - int idx = -1; + ssize_t idx = -1; ssize_t n; uint8_t * sdu; @@ -797,7 +797,7 @@ ssize_t flow_read(int fd, void * buf, size_t count) return -1; } - memcpy(buf, sdu, MIN(n, (ssize_t) count)); + memcpy(buf, sdu, MIN((size_t) n, count)); shm_rdrbuff_remove(ai.rdrb, idx); @@ -952,7 +952,7 @@ int flow_event_wait(struct flow_set * set, struct fqueue * fq, const struct timespec * timeout) { - int ret; + ssize_t ret; if (set == NULL) return -EINVAL; @@ -964,9 +964,6 @@ int flow_event_wait(struct flow_set * set, if (ret == -ETIMEDOUT) return -ETIMEDOUT; - if (ret < 0) - return ret; - fq->fqsize = ret; fq->next = 0; @@ -1217,7 +1214,7 @@ int ipcp_flow_alloc_reply(int fd, int response) int ipcp_flow_read(int fd, struct shm_du_buff ** sdb) { - int idx = -1; + ssize_t idx = -1; int port_id = -1; pthread_rwlock_rdlock(&ai.data_lock); @@ -1252,7 +1249,7 @@ int ipcp_flow_read(int fd, struct shm_du_buff ** sdb) int ipcp_flow_write(int fd, struct shm_du_buff * sdb) { - ssize_t idx; + size_t idx; if (sdb == NULL) return -EINVAL; @@ -1288,7 +1285,7 @@ ssize_t local_flow_read(int fd) return shm_rbuff_read(ai.flows[fd].rx_rb); } -int local_flow_write(int fd, ssize_t idx) +int local_flow_write(int fd, size_t idx) { if (fd < 0) return -EINVAL; @@ -1326,6 +1323,12 @@ int ipcp_read_shim(int fd, struct shm_du_buff ** sdb) } idx = shm_rbuff_read(ai.flows[fd].rx_rb); + if (idx < 0) { + pthread_rwlock_unlock(&ai.flows_lock); + pthread_rwlock_unlock(&ai.data_lock); + return -EAGAIN; + } + *sdb = shm_rdrbuff_get(ai.rdrb, idx); pthread_rwlock_unlock(&ai.flows_lock); |