From 5164c74ad40c1caa9e0040da4a316d9d6af4aa1a Mon Sep 17 00:00:00 2001 From: Alex Lisitsyn Date: Fri, 6 Jun 2025 07:14:07 +0100 Subject: [PATCH] fix transport master-slave destroy sequence --- examples/serial/mb_serial_master/sdkconfig.ci.ascii | 2 ++ examples/serial/mb_serial_master/sdkconfig.ci.rtu | 2 ++ examples/serial/mb_serial_slave/sdkconfig.ci.ascii | 4 +++- examples/serial/mb_serial_slave/sdkconfig.ci.rtu | 2 ++ examples/serial/mb_serial_slave/sdkconfig.defaults | 2 ++ examples/tcp/mb_tcp_master/sdkconfig.ci.ethernet | 3 +++ examples/tcp/mb_tcp_master/sdkconfig.ci.wifi | 3 +++ examples/tcp/mb_tcp_slave/sdkconfig.ci.ethernet | 3 +++ examples/tcp/mb_tcp_slave/sdkconfig.ci.wifi | 3 +++ modbus/mb_ports/tcp/port_tcp_slave.c | 1 - modbus/mb_transports/ascii/ascii_master.c | 10 ++++++---- modbus/mb_transports/ascii/ascii_slave.c | 8 +++++--- modbus/mb_transports/rtu/rtu_master.c | 8 +++++--- modbus/mb_transports/rtu/rtu_slave.c | 2 +- modbus/mb_transports/tcp/tcp_master.c | 2 +- modbus/mb_transports/tcp/tcp_slave.c | 2 +- .../cpp/modbus_serial_cpp_test/sdkconfig.defaults | 3 +++ 17 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 test_apps/cpp/modbus_serial_cpp_test/sdkconfig.defaults diff --git a/examples/serial/mb_serial_master/sdkconfig.ci.ascii b/examples/serial/mb_serial_master/sdkconfig.ci.ascii index 931ef7a..7776818 100644 --- a/examples/serial/mb_serial_master/sdkconfig.ci.ascii +++ b/examples/serial/mb_serial_master/sdkconfig.ci.ascii @@ -5,3 +5,5 @@ CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=400 CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD=y CONFIG_FMB_EXT_TYPE_SUPPORT=y +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/serial/mb_serial_master/sdkconfig.ci.rtu b/examples/serial/mb_serial_master/sdkconfig.ci.rtu index 0545373..80f3665 100644 --- a/examples/serial/mb_serial_master/sdkconfig.ci.rtu +++ b/examples/serial/mb_serial_master/sdkconfig.ci.rtu @@ -5,3 +5,5 @@ CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=400 CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD=y CONFIG_FMB_EXT_TYPE_SUPPORT=y +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/serial/mb_serial_slave/sdkconfig.ci.ascii b/examples/serial/mb_serial_slave/sdkconfig.ci.ascii index 20e4dc4..c60c2ce 100644 --- a/examples/serial/mb_serial_slave/sdkconfig.ci.ascii +++ b/examples/serial/mb_serial_slave/sdkconfig.ci.ascii @@ -3,4 +3,6 @@ CONFIG_MB_COMM_MODE_RTU=n CONFIG_MB_SLAVE_ADDR=1 CONFIG_MB_UART_BAUD_RATE=115200 CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD=y -CONFIG_FMB_EXT_TYPE_SUPPORT=y \ No newline at end of file +CONFIG_FMB_EXT_TYPE_SUPPORT=y +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y \ No newline at end of file diff --git a/examples/serial/mb_serial_slave/sdkconfig.ci.rtu b/examples/serial/mb_serial_slave/sdkconfig.ci.rtu index d9b445c..469e31b 100644 --- a/examples/serial/mb_serial_slave/sdkconfig.ci.rtu +++ b/examples/serial/mb_serial_slave/sdkconfig.ci.rtu @@ -4,3 +4,5 @@ CONFIG_MB_SLAVE_ADDR=1 CONFIG_MB_UART_BAUD_RATE=115200 CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD=y CONFIG_FMB_EXT_TYPE_SUPPORT=y +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/serial/mb_serial_slave/sdkconfig.defaults b/examples/serial/mb_serial_slave/sdkconfig.defaults index f2b0fee..9ea03d7 100644 --- a/examples/serial/mb_serial_slave/sdkconfig.defaults +++ b/examples/serial/mb_serial_slave/sdkconfig.defaults @@ -6,3 +6,5 @@ CONFIG_MB_SLAVE_ADDR=1 CONFIG_MB_UART_BAUD_RATE=115200 CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD=y CONFIG_FMB_EXT_TYPE_SUPPORT=y +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/tcp/mb_tcp_master/sdkconfig.ci.ethernet b/examples/tcp/mb_tcp_master/sdkconfig.ci.ethernet index 6abe7e4..8901360 100644 --- a/examples/tcp/mb_tcp_master/sdkconfig.ci.ethernet +++ b/examples/tcp/mb_tcp_master/sdkconfig.ci.ethernet @@ -31,3 +31,6 @@ CONFIG_ETH_ENABLED=y CONFIG_ETH_USE_ESP32_EMAC=y CONFIG_ETH_PHY_INTERFACE_RMII=y CONFIG_ETH_USE_SPI_ETHERNET=n + +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/tcp/mb_tcp_master/sdkconfig.ci.wifi b/examples/tcp/mb_tcp_master/sdkconfig.ci.wifi index 7b8665f..4f7b881 100644 --- a/examples/tcp/mb_tcp_master/sdkconfig.ci.wifi +++ b/examples/tcp/mb_tcp_master/sdkconfig.ci.wifi @@ -18,3 +18,6 @@ CONFIG_EXAMPLE_CONNECT_ETHERNET=n CONFIG_EXAMPLE_CONNECT_WIFI=y CONFIG_EXAMPLE_WIFI_SSID="${CI_WIFI_SSID}" CONFIG_EXAMPLE_WIFI_PASSWORD="${CI_WIFI_PASSW}" + +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/tcp/mb_tcp_slave/sdkconfig.ci.ethernet b/examples/tcp/mb_tcp_slave/sdkconfig.ci.ethernet index d311706..0bf43cd 100644 --- a/examples/tcp/mb_tcp_slave/sdkconfig.ci.ethernet +++ b/examples/tcp/mb_tcp_slave/sdkconfig.ci.ethernet @@ -30,3 +30,6 @@ CONFIG_ETH_ENABLED=y CONFIG_ETH_USE_ESP32_EMAC=y CONFIG_ETH_PHY_INTERFACE_RMII=y CONFIG_ETH_USE_SPI_ETHERNET=n + +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/examples/tcp/mb_tcp_slave/sdkconfig.ci.wifi b/examples/tcp/mb_tcp_slave/sdkconfig.ci.wifi index 8af3e90..a01694b 100644 --- a/examples/tcp/mb_tcp_slave/sdkconfig.ci.wifi +++ b/examples/tcp/mb_tcp_slave/sdkconfig.ci.wifi @@ -17,3 +17,6 @@ CONFIG_EXAMPLE_CONNECT_ETHERNET=n CONFIG_EXAMPLE_CONNECT_WIFI=y CONFIG_EXAMPLE_WIFI_SSID="${CI_WIFI_SSID}" CONFIG_EXAMPLE_WIFI_PASSWORD="${CI_WIFI_PASSW}" + +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y diff --git a/modbus/mb_ports/tcp/port_tcp_slave.c b/modbus/mb_ports/tcp/port_tcp_slave.c index a4417cd..967f63f 100644 --- a/modbus/mb_ports/tcp/port_tcp_slave.c +++ b/modbus/mb_ports/tcp/port_tcp_slave.c @@ -185,7 +185,6 @@ void mbs_port_tcp_delete(mb_port_base_t *inst) mbs_port_tcp_unregister_handlers(port_obj->pdriver); } (void)mb_drv_unregister(port_obj->pdriver); - CRITICAL_SECTION_CLOSE(port_obj->base.lock); } CRITICAL_SECTION_CLOSE(inst->lock); free(port_obj); diff --git a/modbus/mb_transports/ascii/ascii_master.c b/modbus/mb_transports/ascii/ascii_master.c index 4861710..3e83a19 100644 --- a/modbus/mb_transports/ascii/ascii_master.c +++ b/modbus/mb_transports/ascii/ascii_master.c @@ -97,10 +97,12 @@ error: bool mbm_ascii_transp_delete(mb_trans_base_t *inst) { mbm_ascii_trasp_t *trans = __containerof(inst, mbm_ascii_trasp_t, base); - mb_port_timer_delete(trans->base.port_obj); - mb_port_event_delete(trans->base.port_obj); - mb_port_ser_delete(trans->base.port_obj); - free((void *)trans->pascii_puf); + CRITICAL_SECTION(inst->lock) { + mb_port_timer_delete(trans->base.port_obj); + mb_port_event_delete(trans->base.port_obj); + mb_port_ser_delete(trans->base.port_obj); + free((void *)trans->pascii_puf); + } CRITICAL_SECTION_CLOSE(inst->lock); free(trans); return true; diff --git a/modbus/mb_transports/ascii/ascii_slave.c b/modbus/mb_transports/ascii/ascii_slave.c index 812d430..eb3c3a5 100644 --- a/modbus/mb_transports/ascii/ascii_slave.c +++ b/modbus/mb_transports/ascii/ascii_slave.c @@ -94,9 +94,11 @@ error: bool mbs_ascii_transp_delete(mb_trans_base_t *inst) { mbs_ascii_trasp_t *transp = __containerof(inst, mbs_ascii_trasp_t, base); - mb_port_timer_delete(transp->base.port_obj); - mb_port_event_delete(transp->base.port_obj); - mb_port_ser_delete(transp->base.port_obj); + CRITICAL_SECTION(inst->lock) { + mb_port_timer_delete(transp->base.port_obj); + mb_port_event_delete(transp->base.port_obj); + mb_port_ser_delete(transp->base.port_obj); + } free(transp->pascii_puf); CRITICAL_SECTION_CLOSE(inst->lock); free(transp); diff --git a/modbus/mb_transports/rtu/rtu_master.c b/modbus/mb_transports/rtu/rtu_master.c index 9c8716f..7a0ca31 100644 --- a/modbus/mb_transports/rtu/rtu_master.c +++ b/modbus/mb_transports/rtu/rtu_master.c @@ -104,9 +104,11 @@ error: bool mbm_rtu_transp_delete(mb_trans_base_t *inst) { mbm_rtu_transp_t *transp = __containerof(inst, mbm_rtu_transp_t, base); - mb_port_ser_delete(transp->base.port_obj); - mb_port_timer_delete(transp->base.port_obj); - mb_port_event_delete(transp->base.port_obj); + CRITICAL_SECTION(inst->lock) { + mb_port_timer_delete(transp->base.port_obj); + mb_port_event_delete(transp->base.port_obj); + mb_port_ser_delete(transp->base.port_obj); + } CRITICAL_SECTION_CLOSE(inst->lock); free(transp); return true; diff --git a/modbus/mb_transports/rtu/rtu_slave.c b/modbus/mb_transports/rtu/rtu_slave.c index 2dd7835..deb0162 100644 --- a/modbus/mb_transports/rtu/rtu_slave.c +++ b/modbus/mb_transports/rtu/rtu_slave.c @@ -93,9 +93,9 @@ bool mbs_rtu_transp_delete(mb_trans_base_t *inst) { mbs_rtu_transp_t *transp = __containerof(inst, mbs_rtu_transp_t, base); CRITICAL_SECTION(inst->lock) { - mb_port_ser_delete(transp->base.port_obj); mb_port_timer_delete(transp->base.port_obj); mb_port_event_delete(transp->base.port_obj); + mb_port_ser_delete(transp->base.port_obj); } CRITICAL_SECTION_CLOSE(inst->lock); free(transp); diff --git a/modbus/mb_transports/tcp/tcp_master.c b/modbus/mb_transports/tcp/tcp_master.c index f70b957..95a6d02 100644 --- a/modbus/mb_transports/tcp/tcp_master.c +++ b/modbus/mb_transports/tcp/tcp_master.c @@ -93,9 +93,9 @@ bool mbm_tcp_transp_delete(mb_trans_base_t *inst) mbm_tcp_transp_t *transp = __containerof(inst, mbm_tcp_transp_t, base); // destroy method of port tcp master is here CRITICAL_SECTION(inst->lock) { - mbm_port_tcp_delete(inst->port_obj); mb_port_timer_delete(inst->port_obj); mb_port_event_delete(inst->port_obj); + mbm_port_tcp_delete(inst->port_obj); } CRITICAL_SECTION_CLOSE(inst->lock); free(transp); diff --git a/modbus/mb_transports/tcp/tcp_slave.c b/modbus/mb_transports/tcp/tcp_slave.c index 235388d..ec4bee7 100644 --- a/modbus/mb_transports/tcp/tcp_slave.c +++ b/modbus/mb_transports/tcp/tcp_slave.c @@ -91,9 +91,9 @@ bool mbs_tcp_transp_delete(mb_trans_base_t *inst) mbs_tcp_transp_t *transp = __containerof(inst, mbs_tcp_transp_t, base); // destroy method of port tcp slave is here CRITICAL_SECTION(inst->lock) { - mbs_port_tcp_delete(inst->port_obj); mb_port_timer_delete(inst->port_obj); mb_port_event_delete(inst->port_obj); + mbs_port_tcp_delete(inst->port_obj); } CRITICAL_SECTION_CLOSE(inst->lock); free(transp); diff --git a/test_apps/cpp/modbus_serial_cpp_test/sdkconfig.defaults b/test_apps/cpp/modbus_serial_cpp_test/sdkconfig.defaults new file mode 100644 index 0000000..eee55f2 --- /dev/null +++ b/test_apps/cpp/modbus_serial_cpp_test/sdkconfig.defaults @@ -0,0 +1,3 @@ +# General options for test +CONFIG_HEAP_POISONING_COMPREHENSIVE=y +CONFIG_HEAP_TRACING_OFF=y