0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 04:42:18 +02:00

Fix an issue with async (video) source destruction

obs_source_output_video can cause cached frames to be freed twice if
called with a partially destroyed source, among other undesirable
effects; freeing the source private data right after the destroy signal
has been processed ensures proper behavior
This commit is contained in:
Palana 2014-05-04 21:01:46 +02:00
parent 9e2375726b
commit 4682cfb61b
2 changed files with 9 additions and 4 deletions

View File

@ -211,6 +211,9 @@ void obs_source_destroy(struct obs_source *source)
obs_source_dosignal(source, "source_destroy", "destroy");
if (source->context.data)
source->info.destroy(source->context.data);
if (source->filter_parent)
obs_source_filter_remove(source->filter_parent, source);
@ -225,9 +228,6 @@ void obs_source_destroy(struct obs_source *source)
texture_destroy(source->async_texture);
gs_leavecontext();
if (source->context.data)
source->info.destroy(source->context.data);
for (i = 0; i < MAX_AV_PLANES; i++)
bfree(source->audio_data.data[i]);

View File

@ -132,7 +132,12 @@ struct obs_source_info {
*/
void *(*create)(obs_data_t settings, obs_source_t source);
/** Destroys the private data for the source */
/**
* Destroys the private data for the source
*
* Async sources must not call obs_source_output_video after returning
* from destroy
*/
void (*destroy)(void *data);
/** Returns the width of the source. Required if this is an input