+static void TerminateAout( input_resource_t *p_resource )
+{
+ vlc_mutex_lock( &p_resource->lock_hold );
+
+ aout_instance_t *p_aout = p_resource->p_aout;
+ p_resource->p_aout = NULL;
+
+ vlc_mutex_unlock( &p_resource->lock_hold );
+
+ if( p_aout )
+ vlc_object_release( p_aout );
+}
+
+static void Destructor( gc_object_t *p_gc )
+{
+ input_resource_t *p_resource = vlc_priv( p_gc, input_resource_t );
+
+ DestroySout( p_resource );
+ DestroyVout( p_resource );
+ DestroyAout( p_resource );
+
+ vlc_mutex_destroy( &p_resource->lock_hold );
+ vlc_mutex_destroy( &p_resource->lock );
+ free( p_resource );
+}