mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
fix(spi_slave): free DMA-private buffers when transaction queue is full
spi_slave_queue_trans calls spi_slave_setup_priv_trans to allocate DMA buffers, then tries xQueueSend. If the queue is full the function returns ESP_ERR_TIMEOUT without freeing those buffers, leaking up to 2 * max_transfer_sz per failed call. Call spi_slave_uninstall_priv_trans before returning the timeout.
This commit is contained in:
@@ -434,6 +434,7 @@ esp_err_t SPI_SLAVE_ATTR spi_slave_queue_trans(spi_host_device_t host, const spi
|
|||||||
|
|
||||||
r = xQueueSend(spihost[host]->trans_queue, (void *)&priv_trans, ticks_to_wait);
|
r = xQueueSend(spihost[host]->trans_queue, (void *)&priv_trans, ticks_to_wait);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
|
spi_slave_uninstall_priv_trans(host, &priv_trans);
|
||||||
return ESP_ERR_TIMEOUT;
|
return ESP_ERR_TIMEOUT;
|
||||||
}
|
}
|
||||||
esp_intr_enable(spihost[host]->intr);
|
esp_intr_enable(spihost[host]->intr);
|
||||||
|
|||||||
Reference in New Issue
Block a user