[vlc-devel] [PATCH] keystore/file: use POSIX file locking when flock() is unavailable
Sean McGovern
gseanmcg at gmail.com
Mon Apr 11 16:40:21 CEST 2016
On Apr 11, 2016 08:28, "Thomas Guillem" <thomas at gllm.fr> wrote:
>
> Hi,
Hi Thomas,
First of all, thank you for the review! See my responses inline.
>
> On Mon, Apr 11, 2016, at 02:44, Sean McGovern wrote:
> > Additionally, remove the unlock call as fclose() will drop
> > the lock for us.
> > ---
> > modules/keystore/file.c | 37 +++++++++++++++++++++++++++++--------
> > 1 file changed, 29 insertions(+), 8 deletions(-)
> >
> > diff --git a/modules/keystore/file.c b/modules/keystore/file.c
> > index 381ec87..ec166db 100644
> > --- a/modules/keystore/file.c
> > +++ b/modules/keystore/file.c
> > @@ -27,6 +27,9 @@
> > #ifdef HAVE_FLOCK
> > #include <sys/file.h>
> > #endif
> > +#ifdef HAVE_FCNTL
> elif?
> > +#include <fcntl.h>
> > +#endif
> >
> > #include <vlc_common.h>
> > #include <vlc_plugin.h>
> > @@ -263,6 +266,24 @@ end:
> > return VLC_SUCCESS;
> > }
> >
> > +#if (defined (HAVE_FCNTL) && defined (F_SETLKW))
>
> maybe:
> #if (!defined(HAVE_FLOCK) && defined (HAVE_FCNTL) && defined (F_SETLKW))
>
Sure, no problem.
>
> > +static int
> > +posix_lock_fd(int fd)
> > +{
> > + struct flock lock;
> > +
> > + if(fd == -1)
> > + return -1;
> > +
> > + lock.l_start = 0;
> > + lock.l_len = 0;
> > + lock.l_whence = SEEK_SET;
> > + lock.l_type = F_WRLCK;
> > +
> > + return fcntl(fd, F_SETLKW, &lock);
> > +}
> > +#endif
> > +
> > static int
> > file_open(const char *psz_file, const char *psz_mode, FILE **pp_file)
> > {
> > @@ -276,20 +297,20 @@ file_open(const char *psz_file, const char
> > *psz_mode, FILE **pp_file)
> >
> > #ifdef HAVE_FLOCK
> > if (flock(i_fd, LOCK_EX) != 0)
> > +#else
> > + if (posix_lock_fd(i_fd) != 0)
> > +#endif
> > {
> > fclose(p_file);
> > }
> > -#endif
> > +
>
> Why moving this ending ?
> On windows, there is no lock fonction, but opening the file in rw is
> enough to lock it.
>
Oh, woops! Good catch -- will fix and re-send later today.
> > *pp_file = p_file;
> > return i_fd;
> > }
> >
> > static void
> > -file_close(FILE *p_file, int i_fd)
> > +file_close(FILE *p_file)
> > {
> > -#ifdef HAVE_FLOCK
> > - flock(i_fd, LOCK_UN);
> > -#endif
> > fclose(p_file);
> > }
> >
> > @@ -349,7 +370,7 @@ Store(vlc_keystore *p_keystore, const char *const
> > ppsz_values[KEY_MAX],
> > i_ret = file_save(p_keystore, p_file, i_fd, &list);
> >
> > end:
> > - file_close(p_file, i_fd);
> > + file_close(p_file);
> > ks_list_free(&list);
> > return i_ret;
> > }
> > @@ -413,7 +434,7 @@ Find(vlc_keystore *p_keystore, const char *const
> > ppsz_values[KEY_MAX],
> >
> > *pp_entries = out_list.p_entries;
> > end:
> > - file_close(p_file, i_fd);
> > + file_close(p_file);
> > ks_list_free(&list);
> > return out_list.i_count;
> > }
> > @@ -445,7 +466,7 @@ Remove(vlc_keystore *p_keystore, const char *const
> > ppsz_values[KEY_MAX])
> > i_count = 0;
> >
> > end:
> > - file_close(p_file, i_fd);
> > + file_close(p_file);
> > ks_list_free(&list);
> > return i_count;
> > }
> > --
> >
-- Sean McG.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20160411/bb9c6313/attachment.html>
More information about the vlc-devel
mailing list