From 97d9f471c3ecbde6bdf0c2582f7cb6c37699a40e Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 22 Dec 2020 16:48:57 +0000 Subject: [PATCH] Fix websockets connections blocking non-ws connections on Windows. Closes #1934. Thanks to sectokia and jarapa9. --- ChangeLog.txt | 2 ++ src/mux_poll.c | 6 +++--- src/websockets.c | 3 --- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index a3eaaf92..4d091abb 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -6,6 +6,8 @@ Broker: - Fix dynamic security configuration possibly not being reloaded on Windows only. Closes #1962. - Add more log messages for dynsec load/save error conditions. +- Fix websockets connections blocking non-websockets connections on Windows. + Closes #1934. Build: - Fix man pages not being built when using CMake. Closes #1969. diff --git a/src/mux_poll.c b/src/mux_poll.c index 79926641..947a512e 100644 --- a/src/mux_poll.c +++ b/src/mux_poll.c @@ -84,7 +84,7 @@ int mux_poll__init(struct mosquitto__listener_sock *listensock, int listensock_c pollfd_max = (size_t)sysconf(_SC_OPEN_MAX); #endif - pollfds = mosquitto__malloc(sizeof(struct pollfd)*pollfd_max); + pollfds = mosquitto__calloc(pollfd_max, sizeof(struct pollfd)); if(!pollfds){ log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory."); return MOSQ_ERR_NOMEM; @@ -145,7 +145,7 @@ int mux_poll__add_in(struct mosquitto *context) if(context->pollfd_index != -1){ pollfds[context->pollfd_index].fd = context->sock; - pollfds[context->pollfd_index].events = POLLIN | POLLPRI; + pollfds[context->pollfd_index].events = POLLIN; pollfds[context->pollfd_index].revents = 0; }else{ for(i=0; iws_context){ /* Nothing needs to happen here, because we always call lws_service in the loop. diff --git a/src/websockets.c b/src/websockets.c index 6a9c1bee..4b9d4222 100644 --- a/src/websockets.c +++ b/src/websockets.c @@ -188,9 +188,6 @@ static int callback_mqtt( if(mosq->sock != INVALID_SOCKET){ HASH_DELETE(hh_sock, db.contexts_by_sock, mosq); mosq->sock = INVALID_SOCKET; -#ifndef WITH_EPOLL - mosq->pollfd_index = -1; -#endif mux__delete(mosq); } mosq->wsi = NULL;