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