diff --git a/components/freemodbus/port/portevent_m.c b/components/freemodbus/port/portevent_m.c index 7ad91433f2..eabadffef0 100644 --- a/components/freemodbus/port/portevent_m.c +++ b/components/freemodbus/port/portevent_m.c @@ -252,7 +252,7 @@ eMBMasterReqErrCode eMBMasterWaitRequestFinish( void ) { MB_EVENT_REQ_MASK, // The bits within the event group to wait for. pdTRUE, // Masked bits should be cleared before returning. pdFALSE, // Don't wait for both bits, either bit will do. - 1000 ); // Wait forever for either bit to be set. //portMAX_DELAY + portMAX_DELAY ); // Wait forever for either bit to be set. xRecvedEvent = (eMBMasterEventType)(uxBits); if (xRecvedEvent) { ESP_LOGD(MB_PORT_TAG,"%s: returned event = 0x%x", __func__, xRecvedEvent); @@ -271,7 +271,12 @@ eMBMasterReqErrCode eMBMasterWaitRequestFinish( void ) { } } else { ESP_LOGE(MB_PORT_TAG,"%s: Incorrect event or timeout xRecvedEvent = 0x%x", __func__, uxBits); - assert(0); + // https://github.com/espressif/esp-idf/issues/5275 + // if a no event is received, that means vMBMasterPortEventClose() + // has been closed, so event group has been deleted by FreeRTOS, which + // triggers the send of 0 value to the event group to unlock this task + // waiting on it. For this patch, handles it as a time out without assert. + eErrStatus = MB_MRE_TIMEDOUT; } return eErrStatus; }