p_libvlc->p_playlist = NULL;
p_libvlc->p_interaction = NULL;
p_libvlc->p_vlm = NULL;
- p_libvlc->psz_object_name = "libvlc";
+ p_libvlc->psz_object_name = strdup( "libvlc" );
/* Initialize message queue */
msg_Create( p_libvlc );
/* Get the executable name (similar to the basename command) */
if( i_argc > 0 )
{
- const char *exe = p_libvlc->psz_object_name = ppsz_argv[0];
+ const char *exe = strdup( ppsz_argv[0] );
+ const char *tmp = exe;
while( *exe )
{
if( *exe++ == '/' )
- p_libvlc->psz_object_name = exe;
+ tmp = exe;
}
+ p_libvlc->psz_object_name = strdup( tmp );
}
else
{
- p_libvlc->psz_object_name = "vlc";
+ p_libvlc->psz_object_name = strdup( "vlc" );
}
/*
vout_thread_t * p_vout = NULL;
aout_instance_t * p_aout = NULL;
announce_handler_t * p_announce = NULL;
+ sout_instance_t * p_sout = NULL;
/* Ask the interfaces to stop and destroy them */
msg_Dbg( p_libvlc, "removing all interfaces" );
aout_Delete( p_aout );
}
+ p_sout = vlc_object_find( p_libvlc, VLC_OBJECT_SOUT, FIND_CHILD );
+ if( p_sout )
+ {
+ msg_Dbg( p_sout, "removing kept stream output" );
+ vlc_object_detach( (vlc_object_t*)p_sout );
+ vlc_object_release( (vlc_object_t*)p_sout );
+ sout_DeleteInstance( p_sout );
+ }
+
/* Destroy VLM if created in libvlc_InternalInit */
if( p_libvlc->p_vlm )
{
#ifdef HAVE_HAL_1
libhal_ctx_shutdown( ctx, NULL );
dbus_connection_unref( p_connection );
+ libhal_ctx_free( ctx );
#else
hal_shutdown( ctx );
#endif