Diff for /libelwix/src/ring.c between versions 1.4.4.2 and 1.5

version 1.4.4.2, 2026/02/10 17:24:39 version 1.5, 2026/02/10 17:50:00
Line 284  lrb_purge(lrbuf_t *lrb) Line 284  lrb_purge(lrbuf_t *lrb)
   
         atomic_store_explicit((atomic_int*) &lrb->lrb_head, 0, memory_order_relaxed);          atomic_store_explicit((atomic_int*) &lrb->lrb_head, 0, memory_order_relaxed);
         atomic_store_explicit((atomic_int*) &lrb->lrb_tail, 0, memory_order_relaxed);          atomic_store_explicit((atomic_int*) &lrb->lrb_tail, 0, memory_order_relaxed);
           atomic_store_explicit((atomic_int*) &lrb->lrb_full, 0, memory_order_relaxed);
 }  }
   
 /*  /*
Line 323  lrb_isfull(lrbuf_t *lrb) Line 324  lrb_isfull(lrbuf_t *lrb)
                 return 0;                  return 0;
   
         t = atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire);          t = atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire);
        h = atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_relaxed) + 1;        h = atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_acquire);
        if (h >= lrb->lrb_size) 
                h ^= h; 
 
         return (h == t);          return (h == t);
 }  }
   
Line 402  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int  Line 400  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int 
 int  int
 lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)
 {  {
        int h, t, t2, n, l;        int h, t, t2, n, l, f;
   
         if (!lrb)          if (!lrb)
                 return -1;                  return -1;
Line 414  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len) Line 412  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)
         while (42) {          while (42) {
                 t = atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire);                  t = atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire);
                 h = atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_acquire);                  h = atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_acquire);
                   f = atomic_load_explicit((atomic_int*) &lrb->lrb_full, memory_order_acquire);
   
                 l = h - t;                  l = h - t;
                 if (l < 0)                  if (l < 0)
                         l += lrb->lrb_size;                          l += lrb->lrb_size;
                if (!l)                if (!l) {
                        return 0;                        if (!f)
                                 return 0;
                         l = lrb->lrb_size;
                 }
                 if (l > len)                  if (l > len)
                         l = len;                          l = len;
   

Removed from v.1.4.4.2  
changed lines
  Added in v.1.5


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