[PATCH 2/4] lib: Refactor flow_write

  • From: Dimitri Staessens <dimitri@ouroboros.rocks>
  • To: ouroboros@xxxxxxxxxxxxx
  • Date: Sat, 10 Oct 2020 15:34:26 +0200

Refactor flow_write cleanup.

Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
---
 src/lib/dev.c | 31 +++++++++++--------------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/src/lib/dev.c b/src/lib/dev.c
index 5cf2363..5371527 100644
--- a/src/lib/dev.c
+++ b/src/lib/dev.c
@@ -1069,28 +1069,14 @@ ssize_t flow_write(int          fd,
 
         pthread_rwlock_rdlock(&ai.lock);
 
-        if (frcti_snd(flow->frcti, sdb) < 0) {
-                pthread_rwlock_unlock(&ai.lock);
-                shm_rdrbuff_remove(ai.rdrb, idx);
-                return -ENOMEM;
-        }
+        if (frcti_snd(flow->frcti, sdb) < 0)
+                goto enomem;
 
-        if (flow->qs.cypher_s > 0) {
-                if (crypt_encrypt(flow, sdb) < 0) {
-                        pthread_rwlock_unlock(&ai.lock);
-                        shm_rdrbuff_remove(ai.rdrb, idx);
-                        return -ENOMEM;
-                }
-        }
+        if (flow->qs.cypher_s > 0 && crypt_encrypt(flow, sdb) < 0)
+                goto enomem;
 
-        pthread_rwlock_unlock(&ai.lock);
-
-        if (flow->qs.ber == 0 && add_crc(sdb) != 0) {
-                shm_rdrbuff_remove(ai.rdrb, idx);
-                return -ENOMEM;
-        }
-
-        pthread_rwlock_rdlock(&ai.lock);
+        if (flow->qs.ber == 0 && add_crc(sdb) != 0)
+                goto enomem;
 
         if (flags & FLOWFWNOBLOCK)
                 ret = shm_rbuff_write(flow->tx_rb, idx);
@@ -1105,6 +1091,11 @@ ssize_t flow_write(int          fd,
         pthread_rwlock_unlock(&ai.lock);
 
         return ret < 0 ? (ssize_t) ret : (ssize_t) count;
+
+ enomem:
+        pthread_rwlock_unlock(&ai.lock);
+        shm_rdrbuff_remove(ai.rdrb, idx);
+        return -ENOMEM;
 }
 
 ssize_t flow_read(int    fd,
-- 
2.28.0


Other related posts:

  • » [PATCH 2/4] lib: Refactor flow_write - Dimitri Staessens