input_item_t *input_item_Hold( input_item_t *p_item ) { input_item_owner_t *owner = item_owner(p_item); atomic_fetch_add( &owner->refs, 1 ); return p_item; }
input_item_t *input_item_Hold( input_item_t *p_item ) { input_item_owner_t *owner = item_owner(p_item); atomic_fetch_add( &owner->refs, (atomic_uint)1 ); // sunqueen modify return p_item; }
void input_item_Release( input_item_t *p_item ) { input_item_owner_t *owner = item_owner(p_item); if( atomic_fetch_sub(&owner->refs, 1) != 1 ) return; vlc_event_manager_fini( &p_item->event_manager ); free( p_item->psz_name ); free( p_item->psz_uri ); if( p_item->p_stats != NULL ) { vlc_mutex_destroy( &p_item->p_stats->lock ); free( p_item->p_stats ); } if( p_item->p_meta != NULL ) vlc_meta_Delete( p_item->p_meta ); for( input_item_opaque_t *o = p_item->opaques, *next; o != NULL; o = next ) { next = o->next; free( o ); } for( int i = 0; i < p_item->i_options; i++ ) free( p_item->ppsz_options[i] ); TAB_CLEAN( p_item->i_options, p_item->ppsz_options ); free( p_item->optflagv ); for( int i = 0; i < p_item->i_es; i++ ) { es_format_Clean( p_item->es[i] ); free( p_item->es[i] ); } TAB_CLEAN( p_item->i_es, p_item->es ); for( int i = 0; i < p_item->i_epg; i++ ) vlc_epg_Delete( p_item->pp_epg[i] ); TAB_CLEAN( p_item->i_epg, p_item->pp_epg ); for( int i = 0; i < p_item->i_categories; i++ ) info_category_Delete( p_item->pp_categories[i] ); TAB_CLEAN( p_item->i_categories, p_item->pp_categories ); for( int i = 0; i < p_item->i_slaves; i++ ) input_item_slave_Delete( p_item->pp_slaves[i] ); TAB_CLEAN( p_item->i_slaves, p_item->pp_slaves ); vlc_mutex_destroy( &p_item->lock ); free( owner ); }