diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/dev.c | 17 | ||||
| -rw-r--r-- | src/lib/shm_ap_rbuff.c | 22 | 
2 files changed, 19 insertions, 20 deletions
| diff --git a/src/lib/dev.c b/src/lib/dev.c index 440f40f9..4b5e56be 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -163,10 +163,8 @@ int ap_reg(char ** difs,                  return -EINVAL;          } -        if (_ap_instance == NULL) { -                LOG_DBG("ap_init was not called."); -                return -1; -        } +        if (_ap_instance == NULL) +                return -1; /* -ENOTINIT */          msg.code       = IRM_MSG_CODE__IRM_AP_REG;          msg.has_pid    = true; @@ -468,11 +466,16 @@ int flow_dealloc(int fd)          msg.code         = IRM_MSG_CODE__IRM_FLOW_DEALLOC;          msg.has_port_id  = true; - -        rw_lock_rdlock(&_ap_instance->data_lock); +        rw_lock_rdlock(&_ap_instance->flows_lock);          msg.port_id      = _ap_instance->flows[fd].port_id; +        rw_lock_unlock(&_ap_instance->flows_lock); + +        rw_lock_wrlock(&_ap_instance->data_lock); + +        bmp_release(_ap_instance->fds, fd); +          rw_lock_unlock(&_ap_instance->data_lock);          recv_msg = send_recv_irm_msg(&msg); @@ -556,7 +559,7 @@ ssize_t flow_write(int fd, void * buf, size_t count)                  return 0;          } else {                  while (shm_ap_rbuff_write(_ap_instance->flows[fd].rb, &e) < 0) -                        LOG_DBGF("Couldn't write to rbuff."); +                        ;          }          rw_lock_unlock(&_ap_instance->data_lock); diff --git a/src/lib/shm_ap_rbuff.c b/src/lib/shm_ap_rbuff.c index da6f0e33..0524a96c 100644 --- a/src/lib/shm_ap_rbuff.c +++ b/src/lib/shm_ap_rbuff.c @@ -38,7 +38,7 @@  #define SHM_RBUFF_FILE_SIZE (SHM_RBUFF_SIZE * sizeof(struct rb_entry)          \                               + 2 * sizeof(size_t) + sizeof(pthread_mutex_t)) -#define shm_rbuff_used(rb)((*rb->ptr_head + SHM_RBUFF_SIZE - *rb->ptr_tail)\ +#define shm_rbuff_used(rb)((*rb->ptr_head + SHM_RBUFF_SIZE - *rb->ptr_tail)    \                            & (SHM_RBUFF_SIZE - 1))  #define shm_rbuff_free(rb)(shm_rbuff_used(rb) + 1 < SHM_RBUFF_SIZE) @@ -105,12 +105,10 @@ struct shm_ap_rbuff * shm_ap_rbuff_create()                  return NULL;          } -        rb->shm_base = shm_base; -        rb->ptr_head = (size_t *) (rb->shm_base + SHM_RBUFF_SIZE); -        rb->ptr_tail = (size_t *) -                ((uint8_t *) rb->ptr_head + sizeof(size_t)); -        rb->shm_mutex = (pthread_mutex_t *) -                ((uint8_t *) rb->ptr_tail + sizeof(size_t)); +        rb->shm_base  = shm_base; +        rb->ptr_head  = (size_t *) (rb->shm_base + SHM_RBUFF_SIZE); +        rb->ptr_tail  = rb->ptr_head + 1; +        rb->shm_mutex = (pthread_mutex_t *) (rb->ptr_tail + 1);          pthread_mutexattr_init(&attr);          pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); @@ -165,12 +163,10 @@ struct shm_ap_rbuff * shm_ap_rbuff_open(pid_t pid)                  return NULL;          } -        rb->shm_base = shm_base; -        rb->ptr_head = (size_t *) (rb->shm_base + SHM_RBUFF_SIZE); -        rb->ptr_tail = (size_t *) -                ((uint8_t *) rb->ptr_head + sizeof(size_t)); -        rb->shm_mutex = (pthread_mutex_t *) -                ((uint8_t *) rb->ptr_tail + sizeof(size_t)); +        rb->shm_base  = shm_base; +        rb->ptr_head  = (size_t *) (rb->shm_base + SHM_RBUFF_SIZE); +        rb->ptr_tail  = rb->ptr_head + 1; +        rb->shm_mutex = (pthread_mutex_t *) (rb->ptr_tail + 1);          rb->fd = shm_fd;          rb->pid = pid; | 
