mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-02 10:00:57 +02:00
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.
This commit is contained in:
@@ -391,9 +391,10 @@ void vRingbufferReturnItemFromISR(RingbufHandle_t xRingbuffer, void *pvItem, Bas
|
||||
*
|
||||
* @param[in] xRingbuffer Ring buffer to reset
|
||||
*
|
||||
* @note Users must ensure that all buffers are returned before calling this function
|
||||
* @return ESP_ERR_INVALID_STATE if one or more items are not sent, completed or returned
|
||||
* ESP_OK if the operation was successful
|
||||
*/
|
||||
void vRingbufferReset(RingbufHandle_t xRingbuffer);
|
||||
esp_err_t vRingbufferReset(RingbufHandle_t xRingbuffer);
|
||||
|
||||
/**
|
||||
* @brief Delete a ring buffer
|
||||
|
@@ -1252,15 +1252,19 @@ void vRingbufferReturnItemFromISR(RingbufHandle_t xRingbuffer, void *pvItem, Bas
|
||||
portEXIT_CRITICAL_ISR(&pxRingbuffer->mux);
|
||||
}
|
||||
|
||||
void vRingbufferReset(RingbufHandle_t xRingbuffer)
|
||||
esp_err_t vRingbufferReset(RingbufHandle_t xRingbuffer)
|
||||
{
|
||||
Ringbuffer_t *pxRingbuffer = (Ringbuffer_t *)xRingbuffer;
|
||||
configASSERT(pxRingbuffer);
|
||||
|
||||
portENTER_CRITICAL(&pxRingbuffer->mux);
|
||||
// Check for unreturned buffers
|
||||
configASSERT(pxRingbuffer->pucAcquire == pxRingbuffer->pucWrite);
|
||||
configASSERT(pxRingbuffer->pucRead == pxRingbuffer->pucFree);
|
||||
if ((pxRingbuffer->pucAcquire != pxRingbuffer->pucWrite) ||
|
||||
(pxRingbuffer->pucRead != pxRingbuffer->pucFree)) {
|
||||
portEXIT_CRITICAL(&pxRingbuffer->mux);
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
}
|
||||
|
||||
// Reset state
|
||||
pxRingbuffer->pucAcquire = pxRingbuffer->pucHead;
|
||||
pxRingbuffer->pucWrite = pxRingbuffer->pucHead;
|
||||
@@ -1276,6 +1280,8 @@ void vRingbufferReset(RingbufHandle_t xRingbuffer)
|
||||
}
|
||||
}
|
||||
portEXIT_CRITICAL(&pxRingbuffer->mux);
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
void vRingbufferDelete(RingbufHandle_t xRingbuffer)
|
||||
|
@@ -1371,8 +1371,7 @@ TEST_CASE("Test ring buffer reset unblocks sender ", "[esp_ringbuf][linux]")
|
||||
TEST_ASSERT_EQUAL(false, post_reset_send);
|
||||
// Reset the ring buffer
|
||||
vRingbufferReset(rb);
|
||||
// Check task has unblocked and sent
|
||||
vTaskDelay(1);
|
||||
|
||||
TEST_ASSERT_EQUAL(true, post_reset_send);
|
||||
// Cleanup
|
||||
vRingbufferDelete(rb);
|
||||
|
Reference in New Issue
Block a user