[vlc-devel] commit: Make the config file lock per process rather than per instance ( Rémi Denis-Courmont )
git version control
git at videolan.org
Wed May 6 19:27:13 CEST 2009
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed May 6 20:23:32 2009 +0300| [b8247ace0350412681e0bc502f8bb617cfa426b8] | committer: Rémi Denis-Courmont
Make the config file lock per process rather than per instance
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b8247ace0350412681e0bc502f8bb617cfa426b8
---
src/config/file.c | 15 +++++++++------
src/libvlc.c | 2 --
src/libvlc.h | 3 ---
3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/src/config/file.c b/src/config/file.c
index 4012ea2..322f693 100644
--- a/src/config/file.c
+++ b/src/config/file.c
@@ -410,7 +410,6 @@ static int config_PrepareDir (vlc_object_t *obj)
static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
bool b_autosave )
{
- libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc);
module_t *p_parser;
FILE *file = NULL;
char *permanent = NULL, *temporary = NULL;
@@ -420,9 +419,6 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
bool b_backup;
int i_index;
- /* Acquire config file lock */
- vlc_mutex_lock( &priv->config_lock );
-
if( config_PrepareDir( p_this ) )
{
msg_Err( p_this, "no configuration directory" );
@@ -521,9 +517,15 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
goto error;
}
+ /* The temporary configuration file is per-PID. Therefore SaveConfigFile()
+ * should be serialized against itself within a given process. */
+ static vlc_mutex_t lock = VLC_STATIC_MUTEX;
+ vlc_mutex_lock (&lock);
+
int fd = utf8_open (temporary, O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR);
if (fd == -1)
{
+ vlc_mutex_unlock (&lock);
module_list_free (list);
goto error;
}
@@ -531,6 +533,7 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
if (file == NULL)
{
close (fd);
+ vlc_mutex_unlock (&lock);
module_list_free (list);
goto error;
}
@@ -672,13 +675,14 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
rename (temporary, permanent);
/* (...then synchronize the directory, err, TODO...) */
/* ...and finally close the file */
+ vlc_mutex_unlock (&lock);
#endif
- vlc_mutex_unlock (&priv->config_lock);
fclose (file);
#ifdef WIN32
/* Windows cannot remove open files nor overwrite existing ones */
remove (permanent);
rename (temporary, permanent);
+ vlc_mutex_unlock (&lock);
#endif
free (temporary);
@@ -688,7 +692,6 @@ static int SaveConfigFile( vlc_object_t *p_this, const char *psz_module_name,
error:
if( file )
fclose( file );
- vlc_mutex_unlock( &priv->config_lock );
free (temporary);
free (permanent);
free( p_bigbuffer );
diff --git a/src/libvlc.c b/src/libvlc.c
index 3f441f6..2f5d2f1 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -282,7 +282,6 @@ libvlc_int_t * libvlc_InternalCreate( void )
/* Initialize mutexes */
vlc_mutex_init( &priv->timer_lock );
- vlc_mutex_init( &priv->config_lock );
vlc_cond_init( &priv->exiting );
return p_libvlc;
@@ -1130,7 +1129,6 @@ void libvlc_InternalDestroy( libvlc_int_t *p_libvlc )
/* Destroy mutexes */
vlc_cond_destroy( &priv->exiting );
- vlc_mutex_destroy( &priv->config_lock );
vlc_mutex_destroy( &priv->timer_lock );
#ifndef NDEBUG /* Hack to dump leaked objects tree */
diff --git a/src/libvlc.h b/src/libvlc.h
index 07bc649..94c2130 100644
--- a/src/libvlc.h
+++ b/src/libvlc.h
@@ -201,9 +201,6 @@ typedef struct libvlc_priv_t
libvlc_int_t public_data;
vlc_cond_t exiting; ///< signaled when VLC wants to exit
- /* Configuration */
- vlc_mutex_t config_lock; ///< config file lock
-
int i_last_input_id ; ///< Last id of input item
/* Messages */
More information about the vlc-devel
mailing list