Merge branch 'bugfix/fix_mbm_resource_release_timeout_on_delete' into 'main'

fix mbm resource release timeout on delete

See merge request idf/esp-modbus!144
This commit is contained in:
Alex Lisitsyn
2026-05-14 05:39:40 +01:00
3 changed files with 7 additions and 0 deletions
+1
View File
@@ -31,6 +31,7 @@ extern "C" {
// Set the maximum resource waiting time, the actual time of resource release
// will be dependent on response time set by timer + conversion time if the command is received
#define MB_MAX_RESP_DELAY_MS (3000)
#define MB_MIN_RESP_DELAY_MS (300)
/**
* @brief Modbus controller handler structure
@@ -116,6 +116,9 @@ static esp_err_t mbc_serial_master_delete(void *ctx)
mbm_opts->task_handle = NULL;
vEventGroupDelete(mbm_opts->event_group_handle);
mbm_opts->event_group_handle = NULL;
if (xSemaphoreTake(mbm_opts->mbm_sema, pdMS_TO_TICKS(MB_MIN_RESP_DELAY_MS)) == pdTRUE) {
(void)xSemaphoreGive(mbm_opts->mbm_sema);
}
vSemaphoreDelete(mbm_opts->mbm_sema);
mbm_opts->mbm_sema = NULL;
// delete mb_base instance and all its allocations
@@ -573,6 +573,9 @@ static esp_err_t mbc_tcp_master_delete(void *ctx)
mbm_opts->task_handle = NULL;
vEventGroupDelete(mbm_opts->event_group_handle);
mbm_opts->event_group_handle = NULL;
if (xSemaphoreTake(mbm_opts->mbm_sema, pdMS_TO_TICKS(MB_MIN_RESP_DELAY_MS)) == pdTRUE) {
(void)xSemaphoreGive(mbm_opts->mbm_sema);
}
vSemaphoreDelete(mbm_opts->mbm_sema);
mbm_opts->mbm_sema = NULL;
mb_error = mbm_iface->mb_base->delete (mbm_iface->mb_base);