Diff for /libelwix/src/ring.c between versions 1.8.4.1 and 1.10

version 1.8.4.1, 2026/05/05 15:35:28 version 1.10, 2026/07/27 21:11:07
Line 214  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len,  Line 214  rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t len, 
  *   *
  * @rbuf = Ring buffer   * @rbuf = Ring buffer
  * @out = Data, if =NULL, just dequeue data   * @out = Data, if =NULL, just dequeue data
    * @peek = Peek only data, keep the same tail position
  * return: -1 error, 1 buffer is empty or 0 ok   * return: -1 error, 1 buffer is empty or 0 ok
  */   */
 int  int
rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out)rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out, int peek)
 {  {
         int h, t, n, f;          int h, t, n, f;
   
Line 234  rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out) Line 235  rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out)
   
                 n = (t + 1) % rbuf->rb_bufnum;                  n = (t + 1) % rbuf->rb_bufnum;
   
                   if (out)
                           *out = rbuf->rb_buffer + t;
   
                   if (peek)
                           break;
   
                 f = t;                  f = t;
                 if (atomic_compare_exchange_weak_explicit((atomic_int*) &rbuf->rb_tail,                  if (atomic_compare_exchange_weak_explicit((atomic_int*) &rbuf->rb_tail,
                                         &f, n, memory_order_release, memory_order_relaxed)) {                                          &f, n, memory_order_release, memory_order_relaxed)) {
                         if (out)  
                                 *out = rbuf->rb_buffer + t;  
   
                         atomic_store_explicit((atomic_int*) &rbuf->rb_full, 0, memory_order_release);                          atomic_store_explicit((atomic_int*) &rbuf->rb_full, 0, memory_order_release);
                         break;                          break;
                 }                  }
Line 478  lrb_getr(lrbuf_t *lrb, size_t *len) Line 482  lrb_getr(lrbuf_t *lrb, size_t *len)
  * @lrb = Linear ring buffer   * @lrb = Linear ring buffer
  * @data = Data, if =NULL, just dequeue data   * @data = Data, if =NULL, just dequeue data
  * @len = Length of data   * @len = Length of data
    * @peek = Peek only data, keep the same tail position
  * return: -1 error, 0 buffer is empty or >0 stored data bytes   * return: -1 error, 0 buffer is empty or >0 stored data bytes
  */   */
 int  int
lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)lrb_dequeue(lrbuf_t *lrb, void *data, size_t len, int peek)
 {  {
         int h, t, t2, n, l, f;          int h, t, t2, n, l, f;
   
Line 520  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len) Line 525  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)
                         }                          }
                         t2 = l - n;                          t2 = l - n;
                 }                  }
   
                   if (peek)
                           return l;
   
                 n = t;                  n = t;
                 if (atomic_compare_exchange_weak_explicit((atomic_int*) &lrb->lrb_tail,                  if (atomic_compare_exchange_weak_explicit((atomic_int*) &lrb->lrb_tail,

Removed from v.1.8.4.1  
changed lines
  Added in v.1.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>