Skip to content

Commit c03987c

Browse files
committed
feat(esp_ringbuf): Update vRingbufferReset to return an error
when items are not sent, complete or returned, make the function return an error instead of checking the state in an assert.
1 parent 589d5b1 commit c03987c

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

components/esp_ringbuf/include/freertos/ringbuf.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,10 @@ void vRingbufferReturnItemFromISR(RingbufHandle_t xRingbuffer, void *pvItem, Bas
391391
*
392392
* @param[in] xRingbuffer Ring buffer to reset
393393
*
394-
* @note Users must ensure that all buffers are returned before calling this function
394+
* @return ESP_ERR_INVALID_STATE if one or more items are not sent, completed or returned
395+
* ESP_OK if the operation was successful
395396
*/
396-
void vRingbufferReset(RingbufHandle_t xRingbuffer);
397+
esp_err_t vRingbufferReset(RingbufHandle_t xRingbuffer);
397398

398399
/**
399400
* @brief Delete a ring buffer

components/esp_ringbuf/ringbuf.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,15 +1252,19 @@ void vRingbufferReturnItemFromISR(RingbufHandle_t xRingbuffer, void *pvItem, Bas
12521252
portEXIT_CRITICAL_ISR(&pxRingbuffer->mux);
12531253
}
12541254

1255-
void vRingbufferReset(RingbufHandle_t xRingbuffer)
1255+
esp_err_t vRingbufferReset(RingbufHandle_t xRingbuffer)
12561256
{
12571257
Ringbuffer_t *pxRingbuffer = (Ringbuffer_t *)xRingbuffer;
12581258
configASSERT(pxRingbuffer);
12591259

12601260
portENTER_CRITICAL(&pxRingbuffer->mux);
12611261
// Check for unreturned buffers
1262-
configASSERT(pxRingbuffer->pucAcquire == pxRingbuffer->pucWrite);
1263-
configASSERT(pxRingbuffer->pucRead == pxRingbuffer->pucFree);
1262+
if ((pxRingbuffer->pucAcquire != pxRingbuffer->pucWrite) ||
1263+
(pxRingbuffer->pucRead != pxRingbuffer->pucFree)) {
1264+
portEXIT_CRITICAL(&pxRingbuffer->mux);
1265+
return ESP_ERR_INVALID_STATE;
1266+
}
1267+
12641268
// Reset state
12651269
pxRingbuffer->pucAcquire = pxRingbuffer->pucHead;
12661270
pxRingbuffer->pucWrite = pxRingbuffer->pucHead;
@@ -1276,6 +1280,8 @@ void vRingbufferReset(RingbufHandle_t xRingbuffer)
12761280
}
12771281
}
12781282
portEXIT_CRITICAL(&pxRingbuffer->mux);
1283+
1284+
return ESP_OK;
12791285
}
12801286

12811287
void vRingbufferDelete(RingbufHandle_t xRingbuffer)

components/esp_ringbuf/test_apps/main/test_ringbuf_common.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,8 +1371,7 @@ TEST_CASE("Test ring buffer reset unblocks sender ", "[esp_ringbuf][linux]")
13711371
TEST_ASSERT_EQUAL(false, post_reset_send);
13721372
// Reset the ring buffer
13731373
vRingbufferReset(rb);
1374-
// Check task has unblocked and sent
1375-
vTaskDelay(1);
1374+
13761375
TEST_ASSERT_EQUAL(true, post_reset_send);
13771376
// Cleanup
13781377
vRingbufferDelete(rb);

0 commit comments

Comments
 (0)