From de141540fbb139680e13ad28ab96e7ad49c5bafd Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 17 Dec 2020 10:40:58 +0000 Subject: [PATCH] Fix mosquitto_sub being unable to terminate with Ctrl-C. This occured if a successful connection was not made. Closes #1957. Thanks to Peoh. --- ChangeLog.txt | 4 ++++ client/sub_client.c | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index bfdf3d9e..b2f69d74 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -4,6 +4,10 @@ Broker: - Fix LWT not being sent on client takeover when the existing session wasn't being continued. Closes #1946. +Clients: +- Fix mosquitto_sub being unable to terminate with Ctrl-C if a successful + connection is not made. Closes #1957. + Apps: - Fix `mosquitto_passwd -b` using username as password (not if `-c` is also used). Closes #1949. diff --git a/client/sub_client.c b/client/sub_client.c index 23cdd773..02f98ad4 100644 --- a/client/sub_client.c +++ b/client/sub_client.c @@ -45,13 +45,18 @@ struct mosquitto *mosq = NULL; int last_mid = 0; static bool timed_out = false; static int connack_result = 0; +bool connack_received = false; #ifndef WIN32 void my_signal_handler(int signum) { if(signum == SIGALRM || signum == SIGTERM || signum == SIGINT){ - process_messages = false; - mosquitto_disconnect_v5(mosq, MQTT_RC_DISCONNECT_WITH_WILL_MSG, cfg.disconnect_props); + if(connack_received){ + process_messages = false; + mosquitto_disconnect_v5(mosq, MQTT_RC_DISCONNECT_WITH_WILL_MSG, cfg.disconnect_props); + }else{ + exit(-1); + } } if(signum == SIGALRM){ timed_out = true; @@ -123,6 +128,8 @@ void my_connect_callback(struct mosquitto *mosq, void *obj, int result, int flag UNUSED(flags); UNUSED(properties); + connack_received = true; + connack_result = result; if(!result){ mosquitto_subscribe_multiple(mosq, NULL, cfg.topic_count, cfg.topics, cfg.qos, cfg.sub_opts, cfg.subscribe_props);