about summary refs log tree commit diff
path: root/ring.c
diff options
context:
space:
mode:
Diffstat (limited to 'ring.c')
-rw-r--r--ring.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ring.c b/ring.c
index 0a46b09..07b66d8 100644
--- a/ring.c
+++ b/ring.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2019  C. McEnroe <june@causal.agency>
+/* Copyright (C) 2019  June McEnroe <june@causal.agency>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@ static struct {
 
 void ringAlloc(size_t len) {
 	if (len & (len - 1)) {
-		errx(EX_CONFIG, "ring length must be power of two: %zu", len);
+		errx(EX_USAGE, "ring length must be power of two: %zu", len);
 	}
 	ring.lines = calloc(len, sizeof(*ring.lines));
 	if (!ring.lines) err(EX_OSERR, "calloc");
@@ -53,7 +53,7 @@ void ringAlloc(size_t len) {
 	ring.len = len;
 }
 
-size_t producer;
+static size_t producer;
 
 void ringProduce(const char *line) {
 	size_t i = producer++ & (ring.len - 1);
@@ -112,10 +112,12 @@ size_t ringDiff(size_t consumer) {
 const char *ringPeek(struct timeval *time, size_t consumer) {
 	if (!ringDiff(consumer)) return NULL;
 	if (ringDiff(consumer) > ring.len) {
-		warnx(
-			"consumer %s dropped %zu messages",
-			consumers.ptr[consumer].name, ringDiff(consumer) - ring.len
-		);
+		if (consumers.ptr[consumer].pos) {
+			warnx(
+				"consumer %s dropped %zu messages",
+				consumers.ptr[consumer].name, ringDiff(consumer) - ring.len
+			);
+		}
 		consumers.ptr[consumer].pos = producer - ring.len;
 	}
 	size_t i = consumers.ptr[consumer].pos & (ring.len - 1);