Breaking: construct/destruct WebSocket UserData
This commit is contained in:
@@ -137,7 +137,12 @@ public:
|
|||||||
/* Copy all handlers */
|
/* Copy all handlers */
|
||||||
webSocketContext->getExt()->messageHandler = std::move(behavior.message);
|
webSocketContext->getExt()->messageHandler = std::move(behavior.message);
|
||||||
webSocketContext->getExt()->drainHandler = std::move(behavior.drain);
|
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 */
|
/* Copy settings */
|
||||||
webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength;
|
webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength;
|
||||||
@@ -228,6 +233,10 @@ public:
|
|||||||
/* Emit open event and start the timeout */
|
/* Emit open event and start the timeout */
|
||||||
if (behavior.open) {
|
if (behavior.open) {
|
||||||
us_socket_timeout(SSL, (us_socket_t *) webSocket, behavior.idleTimeout);
|
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);
|
behavior.open(webSocket, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user