diff --git a/src/WebSocket.h b/src/WebSocket.h index 0c5aaf2..68965fb 100644 --- a/src/WebSocket.h +++ b/src/WebSocket.h @@ -195,14 +195,14 @@ public: /* Set shorter timeout (use ping-timeout) to avoid long hanging sockets after end() on broken connections */ Super::timeout(webSocketContextData->idleTimeoutComponents.second); + /* Make sure to unsubscribe from any pub/sub node at exit */ + webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); + webSocketData->subscriber = nullptr; + /* Emit close event */ if (webSocketContextData->closeHandler) { webSocketContextData->closeHandler(this, code, message); } - - /* Make sure to unsubscribe from any pub/sub node at exit */ - webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); - webSocketData->subscriber = nullptr; } /* Corks the response if possible. Leaves already corked socket be. */ diff --git a/src/WebSocketContext.h b/src/WebSocketContext.h index c5fd75b..9da1180 100644 --- a/src/WebSocketContext.h +++ b/src/WebSocketContext.h @@ -258,13 +258,13 @@ private: /* Emit close event */ auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - if (webSocketContextData->closeHandler) { - webSocketContextData->closeHandler((WebSocket *) s, 1006, {(char *) reason, (size_t) code}); - } - /* Make sure to unsubscribe from any pub/sub node at exit */ webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); webSocketData->subscriber = nullptr; + + if (webSocketContextData->closeHandler) { + webSocketContextData->closeHandler((WebSocket *) s, 1006, {(char *) reason, (size_t) code}); + } } /* Destruct in-placed data struct */