mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-13 12:06:09 -05:00
Fix crash in SendWebsocketVendorEvent during OBS shutdown
Guard the vendor event emission with obs_get_module("obs-websocket").
During obs_shutdown() modules are unloaded one-by-one; obs-websocket is
unloaded before advanced-scene-switcher, so the proc handler pointer (_ph)
cached in obs-websocket-api.h is already stale when FreeSceneSwitcher()
runs its stop steps. proc_handler_call() then dereferences freed memory
(use-after-free in pthread_mutex_unlock).
The existing OBSIsShuttingDown() guard does not catch this path: the
forced-exit that follows a "Source Cleanup Error" (scene collection
switch) never fires the SCRIPTING_SHUTDOWN frontend event, so the
plugin's obsIsShuttingDown flag is not set. obs_get_module() returns NULL
once the module is unloaded, which is the reliable signal that
obs-websocket's proc handler is gone.
Refs: #1404
This commit is contained in:
@@ -127,9 +127,10 @@ void RegisterWebsocketRequest(
|
||||
|
||||
void SendWebsocketVendorEvent(const std::string &eventName, obs_data_t *data)
|
||||
{
|
||||
if (OBSIsShuttingDown()) {
|
||||
if (OBSIsShuttingDown() || !obs_get_module("obs-websocket")) {
|
||||
return;
|
||||
}
|
||||
|
||||
obs_websocket_vendor_emit_event(vendor, eventName.c_str(), data);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user