Breaking: construct/destruct WebSocket UserData

This commit is contained in:
Alex Hultman
2019-12-22 00:00:37 +01:00
parent 8b3f037ffd
commit 5ab190f430
+10 -1
View File
@@ -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<SSL, true> *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);
}