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:
morris
2026-06-30 16:52:26 +08:00
parent b1d4725de1
commit 612eb0b97f

View File

@@ -402,6 +402,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);
if (!r) {
spi_slave_uninstall_priv_trans(host, &priv_trans);
return ESP_ERR_TIMEOUT;
}
esp_intr_enable(spihost[host]->intr);