aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ringbuf.c12
-rw-r--r--src/ringbuf.h18
2 files changed, 30 insertions, 0 deletions
diff --git a/src/ringbuf.c b/src/ringbuf.c
index 569a70757..ed46c3beb 100644
--- a/src/ringbuf.c
+++ b/src/ringbuf.c
@@ -62,6 +62,18 @@ void ringbuf_reset(struct ringbuf * rb)
rb->write_ptr = 0;
}
+/* Reset the read and write pointers, thread-safe iff called only by writer */
+void ringbuf_writer_reset(struct ringbuf * rb)
+{
+ rb->write_ptr = rb->read_ptr;
+}
+
+/* Reset the read and write pointers, thread-safe iff called only by reader */
+void ringbuf_reader_reset(struct ringbuf * rb)
+{
+ rb->read_ptr = rb->write_ptr;
+}
+
/*
* Return the number of bytes available for reading. This is the
* number of bytes in front of the read pointer and behind the write
diff --git a/src/ringbuf.h b/src/ringbuf.h
index 1465e8fa2..d4baffdbd 100644
--- a/src/ringbuf.h
+++ b/src/ringbuf.h
@@ -173,6 +173,24 @@ size_t ringbuf_read_space(const struct ringbuf * rb);
void ringbuf_reset(struct ringbuf * rb);
/**
+ * Reset the write pointer to the read pointer, making an empty buffer.
+ *
+ * This should only be called by the writer
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ */
+void ringbuf_writer_reset(struct ringbuf * rb);
+
+/**
+ * Reset the read pointer to the write pointer, making an empty buffer.
+ *
+ * This should only be called by the reader
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ */
+void ringbuf_reader_reset(struct ringbuf * rb);
+
+/**
* Write data into the ringbuffer.
*
* @param rb a pointer to the ringbuffer structure.