diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/dev.c | 10 | ||||
| -rw-r--r-- | src/lib/shm_flow_set.c | 4 | 
2 files changed, 9 insertions, 5 deletions
| 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;  } | 
