diff options
author | June McEnroe <june@causal.agency> | 2019-10-27 22:42:33 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-10-27 22:42:33 -0400 |
commit | 766210d614f249cf04b84b691351d03047f36754 (patch) | |
tree | dc21d9ae2c851ff54be19da4c6b8bd4fa3451939 /ring.c | |
parent | Set SO_REUSEADDR on binds (diff) | |
download | pounce-766210d614f249cf04b84b691351d03047f36754.tar.gz pounce-766210d614f249cf04b84b691351d03047f36754.zip |
Only increment consumer after successful send
Diffstat (limited to '')
-rw-r--r-- | ring.c | 10 |
1 files changed, 8 insertions, 2 deletions
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) { |