Fix use of vlc_object_wait()
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 7 Sep 2008 11:26:15 +0000 (14:26 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 7 Sep 2008 11:26:15 +0000 (14:26 +0300)
src/misc/win32_specific.c

index 85d52a5..5de59a5 100644 (file)
@@ -124,6 +124,7 @@ static unsigned __stdcall IPCHelperThread( void * );
 LRESULT CALLBACK WMCOPYWNDPROC( HWND, UINT, WPARAM, LPARAM );
 static vlc_object_t *p_helper = NULL;
 static unsigned long hIPCHelper;
 LRESULT CALLBACK WMCOPYWNDPROC( HWND, UINT, WPARAM, LPARAM );
 static vlc_object_t *p_helper = NULL;
 static unsigned long hIPCHelper;
+static HANDLE hIPCHelperReady;
 
 typedef struct
 {
 
 typedef struct
 {
@@ -177,16 +178,14 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
             p_helper =
                 vlc_custom_create( p_this, sizeof(vlc_object_t),
                                    VLC_OBJECT_GENERIC, typename );
             p_helper =
                 vlc_custom_create( p_this, sizeof(vlc_object_t),
                                    VLC_OBJECT_GENERIC, typename );
-            vlc_object_lock( p_helper );
 
             /* Run the helper thread */
 
             /* Run the helper thread */
+            hIPCHelperReady = CreateEvent( NULL, FALSE, FALSE, NULL );
             hIPCHelper = _beginthreadex( NULL, 0, IPCHelperThread, p_helper,
                                          0, NULL );
             if( hIPCHelper )
             hIPCHelper = _beginthreadex( NULL, 0, IPCHelperThread, p_helper,
                                          0, NULL );
             if( hIPCHelper )
-                vlc_object_wait( p_helper );
-            vlc_object_unlock( p_helper );
-
-            if( !hIPCHelper )
+                WaitForSingleObject( hIPCHelperReady, INFINITE );
+            else
             {
                 msg_Err( p_this, "one instance mode DISABLED "
                          "(IPC helper thread couldn't be created)" );
             {
                 msg_Err( p_this, "one instance mode DISABLED "
                          "(IPC helper thread couldn't be created)" );
@@ -194,6 +193,7 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
                 p_helper = NULL;
             }
             vlc_object_attach (p_helper, p_this);
                 p_helper = NULL;
             }
             vlc_object_attach (p_helper, p_this);
+            CloseHandle( hIPCHelperReady );
 
             /* Initialization done.
              * Release the mutex to unblock other instances */
 
             /* Initialization done.
              * Release the mutex to unblock other instances */
@@ -292,7 +292,7 @@ static unsigned __stdcall IPCHelperThread( void *data )
     SetWindowLongPtr( ipcwindow, GWLP_USERDATA, (LONG_PTR)p_this );
 
     /* Signal the creation of the thread and events queue */
     SetWindowLongPtr( ipcwindow, GWLP_USERDATA, (LONG_PTR)p_this );
 
     /* Signal the creation of the thread and events queue */
-    vlc_object_signal( p_this );
+    SetEvent( hIPCHelperReady );
 
     while( GetMessage( &message, NULL, 0, 0 ) )
     {
 
     while( GetMessage( &message, NULL, 0, 0 ) )
     {