void __osd_MenuDelete( vlc_object_t *p_this, osd_menu_t *p_osd ) { vlc_value_t lockval; if( !p_osd || !p_this ) return; var_Get( p_this->p_libvlc, "osd_mutex", &lockval ); vlc_mutex_lock( lockval.p_address ); if( vlc_internals( VLC_OBJECT(p_osd) )->i_refcount == 1 ) { var_Destroy( p_osd, "osd-menu-visible" ); var_Destroy( p_osd, "osd-menu-update" ); osd_ParserUnload( p_osd ); } vlc_object_release( p_osd ); if( vlc_internals( VLC_OBJECT(p_osd) )->i_refcount > 0 ) { vlc_mutex_unlock( lockval.p_address ); return; } p_osd = NULL; vlc_mutex_unlock( lockval.p_address ); }
void osd_MenuDelete( vlc_object_t *p_this, osd_menu_t *p_osd ) { if( !p_osd || !p_this ) return; vlc_mutex_lock( &osd_mutex ); if( vlc_internals( VLC_OBJECT(p_osd) )->i_refcount == 1 ) { var_Destroy( p_osd, "osd-menu-visible" ); var_Destroy( p_osd, "osd-menu-update" ); osd_ParserUnload( p_osd ); var_SetAddress( p_this->p_libvlc, "osd-object", NULL ); } vlc_object_release( p_osd ); vlc_mutex_unlock( &osd_mutex ); }
void osd_MenuDelete( vlc_object_t *p_this, osd_menu_t *p_osd ) { vlc_mutex_t *p_lock; if( !p_osd || !p_this ) return; p_lock = osd_GetMutex( p_this ); vlc_mutex_lock( p_lock ); if( vlc_internals( VLC_OBJECT(p_osd) )->i_refcount == 1 ) { vlc_value_t val; var_Destroy( p_osd, "osd-menu-visible" ); var_Destroy( p_osd, "osd-menu-update" ); osd_ParserUnload( p_osd ); val.p_address = NULL; var_Set( p_this->p_libvlc, "osd", val ); } vlc_object_release( p_osd ); vlc_mutex_unlock( p_lock ); }