Breaking: construct/destruct WebSocket UserData
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user