|
|
| 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; |