Commit a46fb0e4 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Do not leak the IPC helper - might fix #1598

parent de587c23
...@@ -259,6 +259,10 @@ typedef struct libvlc_priv_t ...@@ -259,6 +259,10 @@ typedef struct libvlc_priv_t
unsigned threads_count; unsigned threads_count;
vlc_mutex_t threads_lock; vlc_mutex_t threads_lock;
vlc_cond_t threads_wait; vlc_cond_t threads_wait;
#ifdef WIN32
vlc_object_t *ipc_helper;
#endif
} libvlc_priv_t; } libvlc_priv_t;
static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc) static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc)
......
...@@ -149,6 +149,8 @@ void system_Configure( libvlc_int_t *p_this, int *pi_argc, const char *ppsz_argv ...@@ -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" ) if( config_GetInt( p_this, "one-instance" )
|| ( config_GetInt( p_this, "one-instance-when-started-from-file" ) || ( config_GetInt( p_this, "one-instance-when-started-from-file" )
&& config_GetInt( p_this, "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 ...@@ -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 " msg_Err( p_this, "one instance mode DISABLED "
"(IPC helper thread couldn't be created)" ); "(IPC helper thread couldn't be created)" );
vlc_object_release (p_helper);
} }
else
libvlc_priv (p_this)->ipc_helper = p_helper;
/* Initialization done. /* Initialization done.
* Release the mutex to unblock other instances */ * Release the mutex to unblock other instances */
...@@ -360,6 +364,12 @@ void system_End( libvlc_int_t *p_this ) ...@@ -360,6 +364,12 @@ void system_End( libvlc_int_t *p_this )
free( vlc_global()->psz_vlcpath ); free( vlc_global()->psz_vlcpath );
vlc_global()->psz_vlcpath = NULL; 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 ) #if !defined( UNDER_CE )
timeEndPeriod(5); timeEndPeriod(5);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment