[PATCH] lib: Handle FLOWDOWN during blocking read

  • From: Dimitri Staessens <dimitri@ouroboros.rocks>
  • To: ouroboros@xxxxxxxxxxxxx
  • Date: Sun, 20 Feb 2022 13:51:06 +0100

The blocking read from the rbuff was not correctly handling flow down
states, returning a valid index. The attempt to fetch the header then
failed on an assertion. The blocking read will now return -EFLOWDOWN
if the flow is marked down by the IPCP.

Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
---
 src/lib/shm_rbuff_pthr.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/lib/shm_rbuff_pthr.c b/src/lib/shm_rbuff_pthr.c
index cedbc7b1..5a3e8c42 100644
--- a/src/lib/shm_rbuff_pthr.c
+++ b/src/lib/shm_rbuff_pthr.c
@@ -203,9 +203,13 @@ ssize_t shm_rbuff_read_b(struct shm_rbuff *      rb,
         }
 
         if (idx != -ETIMEDOUT) {
-                idx = *tail_el_ptr(rb);
-                *rb->tail = (*rb->tail + 1) & ((SHM_RBUFF_SIZE) - 1);
-                pthread_cond_broadcast(rb->del);
+                if (*rb->acl & ACL_FLOWDOWN)
+                        idx = -EFLOWDOWN;
+                else {
+                        idx = *tail_el_ptr(rb);
+                        *rb->tail = (*rb->tail + 1) & ((SHM_RBUFF_SIZE) - 1);
+                        pthread_cond_broadcast(rb->del);
+                }
         }
 
         pthread_cleanup_pop(true);
-- 
2.35.1


Other related posts:

  • » [PATCH] lib: Handle FLOWDOWN during blocking read - Dimitri Staessens