This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: file locking problem
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 20 Sep 2007 10:09:54 +0200
- Subject: Re: file locking problem
- References: <fcsbji$bj0$1@sea.gmane.org>
- Reply-to: cygwin at cygwin dot com
On Sep 19 19:30, BJ wrote:
> I have a file locking problem that is solved under Mac and Linux using
> fcntl:
> int lockRepFile (int fd, char lock, size_t from, size_t length) {
> struct flock fl;
>
> fl.l_start = from;
> fl.l_len = length;
> fl.l_pid = 0;
>
> if (lock == 'r') fl.l_type = F_RDLCK;
> else if (lock == 'w') fl.l_type = F_WRLCK;
> else if (lock == 'u') fl.l_type = F_UNLCK;
> fl.l_whence = SEEK_SET;
>
> return (fcntl(fd, F_SETLKW, &fl));
> }
>
> Now, unfortunately this hangs occasionally using cygwin - gcc.
>
> I would appreciate any comments and suggestions on how debug this and how to
> improve the performance i.e. stop it from hanging...
F_SETLKW is supposed to hang if the lock is held by another application.
Use F_SETLK instead.
Apart from that, Cygwin has a problem in that Windows doesn't support
advisory locks as are default on Linux and BSD. Windows only supports
mandatory locking. So far Cygwin's fcntl uses Window's mandatory
locking, it doesn't implement its own advisory locking. Maybe that's
your problem.
If none of the above helps, maybe a more detailed problem report with a
reproducible testcase might be the way to go. See
http://cygwin.com/problems.html
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/