From 766210d614f249cf04b84b691351d03047f36754 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 27 Oct 2019 22:42:33 -0400 Subject: Only increment consumer after successful send --- ring.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'ring.c') diff --git a/ring.c b/ring.c index 912d0d3..409fcd4 100644 --- a/ring.c +++ b/ring.c @@ -70,17 +70,23 @@ size_t ringDiff(size_t consumer) { return ring.write - read.ptrs[consumer]; } -const char *ringConsume(time_t *time, size_t consumer) { +const char *ringPeek(time_t *time, size_t consumer) { assert(consumer < read.len); if (!ringDiff(consumer)) return NULL; if (ringDiff(consumer) > RingLen) { read.ptrs[consumer] = ring.write - RingLen; } - size_t i = read.ptrs[consumer]++ % RingLen; + size_t i = read.ptrs[consumer] % RingLen; if (time) *time = ring.times[i]; return ring.lines[i]; } +const char *ringConsume(time_t *time, size_t consumer) { + const char *line = ringPeek(time, consumer); + read.ptrs[consumer]++; + return line; +} + void ringInfo(void) { fprintf(stderr, "producer: %zu\n", ring.write); for (size_t i = 0; i < read.len; ++i) { -- cgit 1.4.1