From 5ab190f430ae8951138bf83cd4d2706558b21129 Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Sun, 22 Dec 2019 00:00:37 +0100 Subject: [PATCH] Breaking: construct/destruct WebSocket UserData --- src/App.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/App.h b/src/App.h index 7473d3f..8c2b6b6 100644 --- a/src/App.h +++ b/src/App.h @@ -137,7 +137,12 @@ public: /* Copy all handlers */ webSocketContext->getExt()->messageHandler = std::move(behavior.message); webSocketContext->getExt()->drainHandler = std::move(behavior.drain); - webSocketContext->getExt()->closeHandler = std::move(behavior.close); + webSocketContext->getExt()->closeHandler = std::move([closeHandler = std::move(behavior.close)](WebSocket *ws, int code, std::string_view message) mutable { + closeHandler(ws, code, message); + + /* Destruct user data after returning from close handler */ + ((UserData *) ws->getUserData())->~UserData(); + }); /* Copy settings */ webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; @@ -228,6 +233,10 @@ public: /* Emit open event and start the timeout */ if (behavior.open) { us_socket_timeout(SSL, (us_socket_t *) webSocket, behavior.idleTimeout); + + /* Default construct the UserData right before calling open handler */ + new (webSocket->getUserData()) UserData; + behavior.open(webSocket, req); }