[vlc-devel] [PATCH] player: don't invalidate input from vlc_player_Stop()

Thomas Guillem thomas at gllm.fr
Tue Jun 9 15:29:42 CEST 2020


This fixes the program assertion in
lib/media_player.c:on_program_selection_changed(). This could happen very
rarely from the libvlc_media_player test.

A valid player->input is needed to get the program information from
vlc_player_GetSelectedProgram(), but this player->input was set to NULL after
the user requested the player to stop. Reminder: Stopping the player is
asynchronous and doesn't prevent upcoming events (specially to get a symmetry
between added and removed track/program events).
---
 src/player/player.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/player/player.c b/src/player/player.c
index a1a39a28f5f..b93267834fa 100644
--- a/src/player/player.c
+++ b/src/player/player.c
@@ -1207,7 +1207,6 @@ vlc_player_Stop(vlc_player_t *player)
     player->started = false;
 
     vlc_player_destructor_AddInput(player, input);
-    player->input = NULL;
     return VLC_SUCCESS;
 }
 
@@ -1885,8 +1884,11 @@ vlc_player_Delete(vlc_player_t *player)
 {
     vlc_mutex_lock(&player->lock);
 
-    if (player->input)
+    if (player->started)
+    {
+        assert(player->input);
         vlc_player_destructor_AddInput(player, player->input);
+    }
 
     player->deleting = true;
     vlc_cond_signal(&player->destructor.wait);
-- 
2.20.1



More information about the vlc-devel mailing list