- if( p_instance->p_playlist )
- vlc_object_release( p_instance->p_playlist );
- vlc_object_release( p_instance->p_vlc );
- VLC_CleanUp( p_instance->i_vlc_id );
- VLC_Destroy( p_instance->i_vlc_id );
+ struct libvlc_callback_entry_list_t *p_listitem = p_instance->p_callback_list;
+
+ while( p_listitem )
+ {
+ struct libvlc_callback_entry_list_t *p_nextlistitem = p_listitem->next;
+ free( p_listitem );
+ p_listitem = p_nextlistitem;
+ }
+
+ libvlc_InternalCleanup( p_instance->p_libvlc_int );
+ libvlc_InternalDestroy( p_instance->p_libvlc_int, VLC_FALSE );