shell/mqtt: Handle negative return value of wait
`wait()` returns the retval of `zsock_poll()` which can be negative but is currently unhandled. This patch make sure that the error will be handled. Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
This commit is contained in:
parent
834fb411e3
commit
148317f075
1 changed files with 19 additions and 3 deletions
|
@ -106,6 +106,13 @@ static void clear_fds(void)
|
||||||
sh_mqtt->nfds = 0;
|
sh_mqtt->nfds = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Upon successful completion, poll() shall return a non-negative value. A positive value indicates
|
||||||
|
* the total number of pollfd structures that have selected events (that is, those for which the
|
||||||
|
* revents member is non-zero). A value of 0 indicates that the call timed out and no file
|
||||||
|
* descriptors have been selected. Upon failure, poll() shall return -1 and set errno to indicate
|
||||||
|
* the error.
|
||||||
|
*/
|
||||||
static int wait(int timeout)
|
static int wait(int timeout)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
@ -252,13 +259,16 @@ static void sh_mqtt_process_handler(struct k_work *work)
|
||||||
(sh_mqtt->transport_state == SHELL_MQTT_TRANSPORT_CONNECTED) &&
|
(sh_mqtt->transport_state == SHELL_MQTT_TRANSPORT_CONNECTED) &&
|
||||||
(sh_mqtt->subscribe_state == SHELL_MQTT_SUBSCRIBED)) {
|
(sh_mqtt->subscribe_state == SHELL_MQTT_SUBSCRIBED)) {
|
||||||
LOG_DBG("Listening to socket");
|
LOG_DBG("Listening to socket");
|
||||||
if (wait(remaining)) {
|
rc = wait(remaining);
|
||||||
|
if (rc > 0) {
|
||||||
LOG_DBG("Process socket for MQTT packet");
|
LOG_DBG("Process socket for MQTT packet");
|
||||||
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
LOG_ERR("%s error: %d", "processed: mqtt_input", rc);
|
LOG_ERR("%s error: %d", "processed: mqtt_input", rc);
|
||||||
goto process_error;
|
goto process_error;
|
||||||
}
|
}
|
||||||
|
} else if (rc < 0) {
|
||||||
|
goto process_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DBG("MQTT %s", "Keepalive");
|
LOG_DBG("MQTT %s", "Keepalive");
|
||||||
|
@ -317,13 +327,16 @@ static void sh_mqtt_subscribe_handler(struct k_work *work)
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
/* Wait for mqtt's connack */
|
/* Wait for mqtt's connack */
|
||||||
LOG_DBG("Listening to socket");
|
LOG_DBG("Listening to socket");
|
||||||
if (wait(CONNECT_TIMEOUT_MS)) {
|
rc = wait(CONNECT_TIMEOUT_MS);
|
||||||
|
if (rc > 0) {
|
||||||
LOG_DBG("Process socket for MQTT packet");
|
LOG_DBG("Process socket for MQTT packet");
|
||||||
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
LOG_ERR("%s error: %d", "subscribe: mqtt_input", rc);
|
LOG_ERR("%s error: %d", "subscribe: mqtt_input", rc);
|
||||||
goto subscribe_error;
|
goto subscribe_error;
|
||||||
}
|
}
|
||||||
|
} else if (rc < 0) {
|
||||||
|
goto subscribe_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No suback, fail */
|
/* No suback, fail */
|
||||||
|
@ -399,13 +412,16 @@ static void sh_mqtt_connect_handler(struct k_work *work)
|
||||||
|
|
||||||
/* Wait for mqtt's connack */
|
/* Wait for mqtt's connack */
|
||||||
LOG_DBG("Listening to socket");
|
LOG_DBG("Listening to socket");
|
||||||
if (wait(CONNECT_TIMEOUT_MS)) {
|
rc = wait(CONNECT_TIMEOUT_MS);
|
||||||
|
if (rc > 0) {
|
||||||
LOG_DBG("Process socket for MQTT packet");
|
LOG_DBG("Process socket for MQTT packet");
|
||||||
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
rc = mqtt_input(&sh_mqtt->mqtt_cli);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
LOG_ERR("%s error: %d", "connect: mqtt_input", rc);
|
LOG_ERR("%s error: %d", "connect: mqtt_input", rc);
|
||||||
goto connect_error;
|
goto connect_error;
|
||||||
}
|
}
|
||||||
|
} else if (rc < 0) {
|
||||||
|
goto connect_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No connack, fail */
|
/* No connack, fail */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue