Browse Source

lavd/sdl: reset context variables after destroy

SDL device reports double free or hangs when quiting.
Reseting variables solves the issue.

The issue is caused by double call of write_trailer callback.
It is called for the first time in write_packet when quit flag is set.
Second call comes from ffmpeg.c or may come from other client application.

Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Lukasz Marek 11 years ago
parent
commit
20fe316e47
1 changed files with 4 additions and 0 deletions
  1. 4 0
      libavdevice/sdl.c

+ 4 - 0
libavdevice/sdl.c

@@ -71,12 +71,16 @@ static int sdl_write_trailer(AVFormatContext *s)
 
     if (sdl->overlay)
         SDL_FreeYUVOverlay(sdl->overlay);
+    sdl->overlay = NULL;
     if (sdl->event_thread)
         SDL_WaitThread(sdl->event_thread, NULL);
+    sdl->event_thread = NULL;
     if (sdl->mutex)
         SDL_DestroyMutex(sdl->mutex);
+    sdl->mutex = NULL;
     if (sdl->init_cond)
         SDL_DestroyCond(sdl->init_cond);
+    sdl->init_cond = NULL;
 
     if (!sdl->sdl_was_already_inited)
         SDL_Quit();