Keep retrying to reconnect without calling loop on failure.

This commit is contained in:
Roger A. Light 2014-08-15 00:00:04 +01:00
parent 950db12c74
commit abe72b8e4c

View file

@ -940,40 +940,43 @@ int mosquitto_loop_forever(struct mosquitto *mosq, int timeout, int max_packets)
if(errno == EPROTO){
return rc;
}
pthread_mutex_lock(&mosq->state_mutex);
if(mosq->state == mosq_cs_disconnecting){
run = 0;
pthread_mutex_unlock(&mosq->state_mutex);
}else{
pthread_mutex_unlock(&mosq->state_mutex);
if(mosq->reconnect_delay > 0 && mosq->reconnect_exponential_backoff){
reconnect_delay = mosq->reconnect_delay*reconnects*reconnects;
}else{
reconnect_delay = mosq->reconnect_delay;
}
if(reconnect_delay > mosq->reconnect_delay_max){
reconnect_delay = mosq->reconnect_delay_max;
}else{
reconnects++;
}
#ifdef WIN32
Sleep(reconnect_delay*1000);
#else
sleep(reconnect_delay);
#endif
do{
rc = MOSQ_ERR_SUCCESS;
pthread_mutex_lock(&mosq->state_mutex);
if(mosq->state == mosq_cs_disconnecting){
run = 0;
pthread_mutex_unlock(&mosq->state_mutex);
}else{
pthread_mutex_unlock(&mosq->state_mutex);
mosquitto_reconnect(mosq);
if(mosq->reconnect_delay > 0 && mosq->reconnect_exponential_backoff){
reconnect_delay = mosq->reconnect_delay*reconnects*reconnects;
}else{
reconnect_delay = mosq->reconnect_delay;
}
if(reconnect_delay > mosq->reconnect_delay_max){
reconnect_delay = mosq->reconnect_delay_max;
}else{
reconnects++;
}
#ifdef WIN32
Sleep(reconnect_delay*1000);
#else
sleep(reconnect_delay);
#endif
pthread_mutex_lock(&mosq->state_mutex);
if(mosq->state == mosq_cs_disconnecting){
run = 0;
pthread_mutex_unlock(&mosq->state_mutex);
}else{
pthread_mutex_unlock(&mosq->state_mutex);
rc = mosquitto_reconnect(mosq);
}
}
}
}while(run && rc != MOSQ_ERR_SUCCESS);
}
return rc;
}