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

version 1.4.4.1, 2026/02/10 15:49:08 version 1.4.4.2, 2026/02/10 17:24:39
Line 298  lrb_isempty(lrbuf_t *lrb) Line 298  lrb_isempty(lrbuf_t *lrb)
         if (!lrb)          if (!lrb)
                 return -1;                  return -1;
   
        return (atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_acquire) ==        return (!atomic_load_explicit((atomic_int*) &lrb->lrb_full, memory_order_acquire) &&
                atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire));                        (atomic_load_explicit((atomic_int*) &lrb->lrb_head, memory_order_acquire) ==
                         atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire)));
 }  }
   
 /*  /*
Line 318  lrb_isfull(lrbuf_t *lrb) Line 319  lrb_isfull(lrbuf_t *lrb)
         if (!lrb->lrb_size)          if (!lrb->lrb_size)
                 return 1;                  return 1;
   
           if (!atomic_load_explicit((atomic_int*) &lrb->lrb_full, memory_order_acquire))
                   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_relaxed) + 1;
         if (h >= lrb->lrb_size)          if (h >= lrb->lrb_size)
Line 370  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int  Line 374  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int 
                 n = len - n;                  n = len - n;
         }          }
   
        atomic_store_explicit((atomic_int*) &lrb->lrb_head, n, memory_order_release);        h = n;
         atomic_store_explicit((atomic_int*) &lrb->lrb_head, h, memory_order_release);
         if (drop > 0)          if (drop > 0)
                 while (42) {                  while (42) {
                         n = t;                          n = t;
Line 380  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int  Line 385  lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int 
                         t = n;                          t = n;
                         t2 = (t + drop) % lrb->lrb_size;                          t2 = (t + drop) % lrb->lrb_size;
                 }                  }
           else
                   t2 = atomic_load_explicit((atomic_int*) &lrb->lrb_tail, memory_order_acquire);
           atomic_store_explicit((atomic_int*) &lrb->lrb_full, (h == t2), memory_order_release);
         return 0;          return 0;
 }  }
   
Line 430  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len) Line 438  lrb_dequeue(lrbuf_t *lrb, void *data, size_t len)
   
                 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,
                                        &n, t2, memory_order_release, memory_order_relaxed))                                        &n, t2, memory_order_release, memory_order_relaxed)) {
                         atomic_store_explicit((atomic_int*) &lrb->lrb_full, 0, memory_order_release);
                         return l;                          return l;
                   }
         }          }
   
         return 0;          return 0;

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


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