Avoid deadlock in flock(2)
* fcntl.cc (fcntl64): Don't lock fd table when performing locking. * flock.cc (flock): Ditto. (lockf): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
eeef727026
commit
41299df081
|
@ -1,3 +1,9 @@
|
||||||
|
2015-11-05 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fcntl.cc (fcntl64): Don't lock fd table when performing locking.
|
||||||
|
* flock.cc (flock): Ditto.
|
||||||
|
(lockf): Ditto.
|
||||||
|
|
||||||
2015-11-05 Corinna Vinschen <corinna@vinschen.de>
|
2015-11-05 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* sigproc.cc (pending_signals::clear): Yet another fix to fix the fix.
|
* sigproc.cc (pending_signals::clear): Yet another fix to fix the fix.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* fcntl.cc: fcntl syscall
|
/* fcntl.cc: fcntl syscall
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2008, 2009,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2008, 2009,
|
||||||
2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
|
2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -32,7 +32,9 @@ fcntl64 (int fd, int cmd, ...)
|
||||||
{
|
{
|
||||||
|
|
||||||
debug_printf ("fcntl(%d, %d, ...)", fd, cmd);
|
debug_printf ("fcntl(%d, %d, ...)", fd, cmd);
|
||||||
cygheap_fdget cfd (fd, true);
|
|
||||||
|
/* Don't lock the fd table when performing locking calls. */
|
||||||
|
cygheap_fdget cfd (fd, cmd < F_GETLK || cmd > F_SETLKW);
|
||||||
if (cfd < 0)
|
if (cfd < 0)
|
||||||
__leave;
|
__leave;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* flock.cc. NT specific implementation of advisory file locking.
|
/* flock.cc. NT specific implementation of advisory file locking.
|
||||||
|
|
||||||
Copyright 2003, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
|
Copyright 2003, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -1773,7 +1773,7 @@ flock (int fd, int operation)
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
cygheap_fdget cfd (fd, true);
|
cygheap_fdget cfd (fd);
|
||||||
if (cfd < 0)
|
if (cfd < 0)
|
||||||
__leave;
|
__leave;
|
||||||
|
|
||||||
|
@ -1817,7 +1817,7 @@ lockf (int filedes, int function, off_t size)
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
cygheap_fdget cfd (filedes, true);
|
cygheap_fdget cfd (filedes);
|
||||||
if (cfd < 0)
|
if (cfd < 0)
|
||||||
__leave;
|
__leave;
|
||||||
|
|
||||||
|
|
|
@ -65,3 +65,6 @@ Bug Fixes
|
||||||
|
|
||||||
- Workaround a bug in Windows 10 NLS handling.
|
- Workaround a bug in Windows 10 NLS handling.
|
||||||
Addresses: https://cygwin.com/ml/cygwin/2015-10/msg00547.html
|
Addresses: https://cygwin.com/ml/cygwin/2015-10/msg00547.html
|
||||||
|
|
||||||
|
- Avoid unnecessry locking and thus a potential deadlock in flock(2).
|
||||||
|
Addresses: https://cygwin.com/ml/cygwin/2015-11/msg00095.html
|
||||||
|
|
Loading…
Reference in New Issue