From cbd6ccb7fa372832715b0e143c816f569bd07ccd Mon Sep 17 00:00:00 2001
From: dimitri staessens <dimitri.staessens@intec.ugent.be>
Date: Sun, 15 May 2016 02:26:27 +0200
Subject: lib: irmd: fixed flow deallocation

Port_id's weren't correctly released. Also removes remaining debug
logs from the library.
---
 src/lib/dev.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

(limited to 'src/lib')

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);
-- 
cgit v1.2.3