Don't remove unused websockets contexts until lws is finished with them.

This commit is contained in:
Roger A. Light 2019-03-17 07:40:01 +00:00
parent 0ced003880
commit c5699da5ce

View File

@ -277,6 +277,7 @@ void context__add_to_disused(struct mosquitto_db *db, struct mosquitto *context)
{
if(context->state == mosq_cs_disused) return;
log__printf(NULL, MOSQ_LOG_DEBUG, "ADD %p", context);
context__set_state(context, mosq_cs_disused);
if(context->id){
@ -295,14 +296,30 @@ void context__add_to_disused(struct mosquitto_db *db, struct mosquitto *context)
void context__free_disused(struct mosquitto_db *db)
{
struct mosquitto *context, *next;
struct mosquitto *context, *next, *last = NULL;
assert(db);
context = db->ll_for_free;
while(context){
next = context->for_free_next;
context__cleanup(db, context, true);
context = next;
#ifdef WITH_WEBSOCKETS
if(context->wsi){
/* Don't delete yet, lws hasn't finished with it */
if(last){
last->for_free_next = context;
}else{
db->ll_for_free = context;
}
next = context->for_free_next;
context->for_free_next = NULL;
last = context;
context = next;
}else
#endif
{
next = context->for_free_next;
context__cleanup(db, context, true);
context = next;
}
}
db->ll_for_free = NULL;
}