]> git.sesse.net Git - vlc/commitdiff
Do not leak the IPC helper - might fix #1598
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 2 Aug 2008 13:55:43 +0000 (16:55 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 2 Aug 2008 14:01:23 +0000 (17:01 +0300)
src/libvlc.h
src/misc/win32_specific.c

index 94e2a6919b031b7d243746f6ac3365361f36db7a..0c7c295846dae957ed6b845bc2052e32c47d6d63 100644 (file)
@@ -259,6 +259,10 @@ typedef struct libvlc_priv_t
     unsigned           threads_count;
     vlc_mutex_t        threads_lock;
     vlc_cond_t         threads_wait;
+
+#ifdef WIN32
+    vlc_object_t       *ipc_helper;
+#endif
 } libvlc_priv_t;
 
 static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc)
index 9b53f77f1a7d09ec365ef7793cedf9bb0694324d..17af95b2cdb9c91bc29a197f7617c5e855158d23 100644 (file)
@@ -149,6 +149,8 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
         }
     }
 
+    libvlc_priv (p_this)->ipc_helper = NULL;
+
     if( config_GetInt( p_this, "one-instance" )
         || ( config_GetInt( p_this, "one-instance-when-started-from-file" )
              && config_GetInt( p_this, "started-from-file" ) ) )
@@ -181,8 +183,10 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv
             {
                 msg_Err( p_this, "one instance mode DISABLED "
                          "(IPC helper thread couldn't be created)" );
-
+                vlc_object_release (p_helper);
             }
+            else
+                libvlc_priv (p_this)->ipc_helper = p_helper;
 
             /* Initialization done.
              * Release the mutex to unblock other instances */
@@ -360,6 +364,12 @@ void system_End( libvlc_int_t *p_this )
         free( vlc_global()->psz_vlcpath );
         vlc_global()->psz_vlcpath = NULL;
     }
+    vlc_object_t *obj = libvlc_priv (p_this)->ipc_helper;
+    if (obj)
+    {
+        vlc_thread_join (obj);
+        vlc_object_release (obj);
+    }
 
 #if !defined( UNDER_CE )
     timeEndPeriod(5);