[PATCH] lib: Fix blocking writes to smaller rbuff

  • From: Dimitri Staessens <dimitri@ouroboros.rocks>
  • To: ouroboros@xxxxxxxxxxxxx
  • Date: Wed, 17 Apr 2019 19:36:51 +0200

This fixes writing at high speeds when the rbuff is smaller than the
rdrbuff. The pthread_cond_wait calls were blocking on the wrong
condition variable.

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

diff --git a/src/lib/shm_rbuff_pthr.c b/src/lib/shm_rbuff_pthr.c
index 5a58605..c7f36a0 100644
--- a/src/lib/shm_rbuff_pthr.c
+++ b/src/lib/shm_rbuff_pthr.c
@@ -111,20 +111,17 @@ int shm_rbuff_write_b(struct shm_rbuff *      rb,
 
         while (!shm_rbuff_free(rb) && ret != -ETIMEDOUT) {
                 if (abstime != NULL)
-                        ret = -pthread_cond_timedwait(rb->add,
+                        ret = -pthread_cond_timedwait(rb->del,
                                                       rb->lock,
                                                       abstime);
                 else
-                        ret = -pthread_cond_wait(rb->add, rb->lock);
+                        ret = -pthread_cond_wait(rb->del, rb->lock);
 #ifdef HAVE_ROBUST_MUTEX
                 if (ret == -EOWNERDEAD)
                         pthread_mutex_consistent(rb->lock);
 #endif
         }
 
-        if (shm_rbuff_empty(rb))
-                pthread_cond_broadcast(rb->add);
-
         if (ret != -ETIMEDOUT) {
                 *head_el_ptr(rb) = (ssize_t) idx;
                 *rb->head = (*rb->head + 1) & ((SHM_RBUFF_SIZE) - 1);
-- 
2.21.0


Other related posts: