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>
 | 
			
		||||
 | 
			
		||||
	* sigproc.cc (pending_signals::clear): Yet another fix to fix the fix.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/* fcntl.cc: fcntl syscall
 | 
			
		||||
 | 
			
		||||
   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.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +32,9 @@ fcntl64 (int fd, int 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)
 | 
			
		||||
	__leave;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
/* 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.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1773,7 +1773,7 @@ flock (int fd, int operation)
 | 
			
		|||
 | 
			
		||||
  __try
 | 
			
		||||
    {
 | 
			
		||||
      cygheap_fdget cfd (fd, true);
 | 
			
		||||
      cygheap_fdget cfd (fd);
 | 
			
		||||
      if (cfd < 0)
 | 
			
		||||
	__leave;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1817,7 +1817,7 @@ lockf (int filedes, int function, off_t size)
 | 
			
		|||
 | 
			
		||||
  __try
 | 
			
		||||
    {
 | 
			
		||||
      cygheap_fdget cfd (filedes, true);
 | 
			
		||||
      cygheap_fdget cfd (filedes);
 | 
			
		||||
      if (cfd < 0)
 | 
			
		||||
	__leave;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,3 +65,6 @@ Bug Fixes
 | 
			
		|||
 | 
			
		||||
- Workaround a bug in Windows 10 NLS handling.
 | 
			
		||||
  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