summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2012-02-14 13:55:45 +0000
committerCorinna Vinschen <corinna@vinschen.de>2012-02-14 13:55:45 +0000
commita8c8f19a43534cb9172539fcfcc6e83a39f48b9d (patch)
tree78f2bfd823df547fcfcc4800187f24ea7600ced6
parent8895d962d5fbb79dcd65db9d801644fb1fa2ca5e (diff)
downloadcygnal-a8c8f19a43534cb9172539fcfcc6e83a39f48b9d.tar.gz
cygnal-a8c8f19a43534cb9172539fcfcc6e83a39f48b9d.tar.bz2
cygnal-a8c8f19a43534cb9172539fcfcc6e83a39f48b9d.zip
* flock.cc (lf_setlock): Don't close waited lock object handle before
we own the node lock. Fix comment.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/flock.cc4
2 files changed, 7 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 834fe7ac0..495c15d79 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,10 @@
2012-02-14 Corinna Vinschen <corinna@vinschen.de>
+ * flock.cc (lf_setlock): Don't close waited lock object handle before
+ we own the node lock. Fix comment.
+
+2012-02-14 Corinna Vinschen <corinna@vinschen.de>
+
* cygheap.cc (init_cygheap::init_installation_root): Convert function
init_installation_root into a cygheap method.
* cygheap.h (struct init_cygheap): Move installation_root,
diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc
index bd508719c..4f920643d 100644
--- a/winsup/cygwin/flock.cc
+++ b/winsup/cygwin/flock.cc
@@ -1039,11 +1039,11 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
DWORD ret = WaitForMultipleObjects (wait_count, w4, FALSE,
proc ? INFINITE : 100L);
SetThreadPriority (GetCurrentThread (), old_prio);
- /* Always close handles before locking the node. */
- NtClose (obj);
if (proc)
CloseHandle (proc);
node->LOCK ();
+ /* Never close lock object handle outside of node lock! */
+ NtClose (obj);
if (ret == WAIT_SIGNAL_ARRIVED)
{
/* A signal came in. */