]> granicus.if.org Git - esp-idf/commitdiff
Fix an assert that erroneously triggered when popping a zero-byte payload from the...
authorJeroen Domburg <jeroen@espressif.com>
Mon, 28 Aug 2017 11:31:26 +0000 (19:31 +0800)
committerJeroen Domburg <jeroen@espressif.com>
Mon, 28 Aug 2017 11:31:26 +0000 (19:31 +0800)
components/freertos/ringbuf.c
components/freertos/test/test_ringbuf.c

index e49b8e5ef4a832dd3b8fe169cffe35f0a5a5a5ca..ec4322df872519a91bf2e767aecfb26043aa17d2 100644 (file)
@@ -337,7 +337,7 @@ static void returnItemToRingbufDefault(ringbuf_t *rb, void *item) {
     uint8_t *data=(uint8_t*)item;
     configASSERT(((int)rb->free_ptr&3)==0);
     configASSERT(data >= rb->data);
-    configASSERT(data < rb->data+rb->size);
+    configASSERT(data <= rb->data+rb->size);
     //Grab the buffer entry that preceeds the buffer
     buf_entry_hdr_t *hdr=(buf_entry_hdr_t*)(data-sizeof(buf_entry_hdr_t));
     configASSERT(hdr->len < rb->size);
index bb8fc72534303733c7b1c98409b0cd75bf4a92c4..ac2e88fe5cc329809513312d6e84494808a42df6 100644 (file)
@@ -195,3 +195,26 @@ TEST_CASE("FreeRTOS ringbuffer test, w/ splitting items", "[freertos][ignore]")
     testRingbuffer(1);
 }
 
+
+TEST_CASE("FreeRTOS ringbuffer test, check if zero-length items are handled correctly", "[freertos]")
+{
+    rb = xRingbufferCreate(32, 0);
+    int r;
+    void *v;
+    size_t sz;
+    for (int x=0; x<128; x++) {
+        if (x!=127) {
+            //Send an item
+            r = xRingbufferSend(rb, NULL, 0, 10000 / portTICK_PERIOD_MS);
+            assert(r==pdTRUE);
+        }
+        if (x!=0) {
+            //Receive an item
+            v=xRingbufferReceive(rb, &sz, 10000 / portTICK_PERIOD_MS);
+            assert(sz==0);
+            vRingbufferReturnItem(rb, v); //actually not needed for NULL data...
+        }
+    }
+    vRingbufferDelete(rb);
+}
+