@@ -4057,14 +4057,12 @@ static void BrokerUsage(const char* prog)
40574057
40584058#if !defined(WOLFMQTT_WOLFIP ) && !defined(WOLFMQTT_BROKER_CUSTOM_NET ) && \
40594059 !defined(NO_MAIN_DRIVER )
4060- static MqttBroker * g_broker = NULL ;
40614060#include <signal.h>
4061+ static volatile sig_atomic_t g_broker_shutdown = 0 ;
40624062static void broker_signal_handler (int signo )
40634063{
4064- if (g_broker != NULL ) {
4065- PRINTF ("broker: received signal %d, shutting down" , signo );
4066- MqttBroker_Stop (g_broker );
4067- }
4064+ (void )signo ;
4065+ g_broker_shutdown = 1 ;
40684066}
40694067#endif
40704068
@@ -4154,16 +4152,28 @@ int wolfmqtt_broker(int argc, char** argv)
41544152
41554153#if !defined(WOLFMQTT_WOLFIP ) && !defined(WOLFMQTT_BROKER_CUSTOM_NET ) && \
41564154 !defined(NO_MAIN_DRIVER )
4157- g_broker = & broker ;
41584155 signal (SIGINT , broker_signal_handler );
41594156 signal (SIGTERM , broker_signal_handler );
4160- #endif
41614157
4158+ rc = MqttBroker_Start (& broker );
4159+ if (rc == MQTT_CODE_SUCCESS ) {
4160+ while (broker .running && !g_broker_shutdown ) {
4161+ rc = MqttBroker_Step (& broker );
4162+ if (rc == MQTT_CODE_CONTINUE ) {
4163+ BROKER_SLEEP_MS (10 );
4164+ }
4165+ else if (rc < 0 && rc != MQTT_CODE_CONTINUE ) {
4166+ break ;
4167+ }
4168+ }
4169+ if (g_broker_shutdown ) {
4170+ PRINTF ("broker: received shutdown signal, shutting down" );
4171+ MqttBroker_Stop (& broker );
4172+ rc = MQTT_CODE_SUCCESS ;
4173+ }
4174+ }
4175+ #else
41624176 rc = MqttBroker_Run (& broker );
4163-
4164- #if !defined(WOLFMQTT_WOLFIP ) && !defined(WOLFMQTT_BROKER_CUSTOM_NET ) && \
4165- !defined(NO_MAIN_DRIVER )
4166- g_broker = NULL ;
41674177#endif
41684178
41694179 MqttBroker_Free (& broker );
0 commit comments