Skip to content

Commit f985e4b

Browse files
committed
Fix f-2764 shutdown signal
1 parent af90ef3 commit f985e4b

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

src/mqtt_broker.c

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
40624062
static 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

Comments
 (0)