+ vlc_mutex_init( &p_intf->p_sys->vout_lock );
+ vlc_cond_init( &p_intf->p_sys->vout_wait );
+
+ vlc_mutex_init( &p_intf->p_sys->init_lock );
+ vlc_cond_init( &p_intf->p_sys->init_wait );
+
+ vlc_mutex_lock( &p_intf->p_sys->init_lock );
+ p_intf->p_sys->b_ready = false;
+
+ if( vlc_clone( &p_intf->p_sys->thread, Run, p_intf,
+ VLC_THREAD_PRIORITY_LOW ) )
+ {
+ vlc_mutex_unlock( &p_intf->p_sys->init_lock );
+
+ vlc_cond_destroy( &p_intf->p_sys->init_wait );
+ vlc_mutex_destroy( &p_intf->p_sys->init_lock );
+ vlc_cond_destroy( &p_intf->p_sys->vout_wait );
+ vlc_mutex_destroy( &p_intf->p_sys->vout_lock );
+ free( p_intf->p_sys );
+ return VLC_EGENERIC;
+ }
+
+ while( !p_intf->p_sys->b_ready )
+ vlc_cond_wait( &p_intf->p_sys->init_wait, &p_intf->p_sys->init_lock );
+ vlc_mutex_unlock( &p_intf->p_sys->init_lock );
+
+ vlc_mutex_lock( &skin_load.mutex );
+ skin_load.intf = p_intf;
+ vlc_mutex_unlock( &skin_load.mutex );
+
+ return VLC_SUCCESS;
+}
+
+//---------------------------------------------------------------------------
+// Close: destroy interface
+//---------------------------------------------------------------------------
+static void Close( vlc_object_t *p_this )
+{
+ intf_thread_t *p_intf = (intf_thread_t *)p_this;
+
+ msg_Dbg( p_intf, "closing skins2 module" );
+
+ vlc_mutex_lock( &skin_load.mutex );
+ skin_load.intf = NULL;
+ vlc_mutex_unlock( &skin_load.mutex);
+
+ vlc_join( p_intf->p_sys->thread, NULL );
+
+ vlc_mutex_destroy( &p_intf->p_sys->init_lock );
+ vlc_cond_destroy( &p_intf->p_sys->init_wait );
+
+ // Unsubscribe from messages bank
+#if 0
+ msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub );
+#endif
+
+ vlc_cond_destroy( &p_intf->p_sys->vout_wait );
+ vlc_mutex_destroy( &p_intf->p_sys->vout_lock );
+
+ // Destroy structure
+ free( p_intf->p_sys );
+}
+
+
+//---------------------------------------------------------------------------
+// Run: main loop
+//---------------------------------------------------------------------------
+static void *Run( void * p_obj )
+{
+ int canc = vlc_savecancel();
+
+ intf_thread_t *p_intf = (intf_thread_t *)p_obj;
+
+ bool b_error = false;
+ char *skin_last = NULL;
+ ThemeLoader *pLoader = NULL;
+ OSLoop *loop = NULL;
+
+ vlc_mutex_lock( &p_intf->p_sys->init_lock );
+