libobs: Hold source ref during source_remove
signal
Holds an active reference to a source during signaling of the `source_remove` signal, to prevent receivers from being given an already-destroyed source. - Call obs_source_remove(source) - Receiver 1 gets signal, calls `obs_source_release(source)` - Receiver 2 gets signal, calls `obs_source_release(source)`, refs == -1, source destroyed - Receiver 3 gets signal, source already destroyed, is forced to ignore signal due to invalid source This is a theoretical situation which is currently possible in obs-websocket.
This commit is contained in:
parent
0072629ceb
commit
d07bd7dff2
@ -793,8 +793,12 @@ void obs_source_remove(obs_source_t *source)
|
||||
return;
|
||||
|
||||
if (!source->removed) {
|
||||
source->removed = true;
|
||||
obs_source_dosignal(source, "source_remove", "remove");
|
||||
obs_source_t *s = obs_source_get_ref(source);
|
||||
if (s) {
|
||||
s->removed = true;
|
||||
obs_source_dosignal(s, "source_remove", "remove");
|
||||
obs_source_release(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user