* flock.cc (inode_t::del_my_locks): Drop useless counter lc. Close

lock object handle explicitely in case of called during fork.  Add
	comment to explain why.
	* fork.cc (frok::child): Drop declaration of fixup_lockf_after_fork.
This commit is contained in:
Corinna Vinschen 2012-02-20 14:08:37 +00:00
parent 2196614e3d
commit 3c53eaeb5b
3 changed files with 15 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2012-02-20 Corinna Vinschen <corinna@vinschen.de>
* flock.cc (inode_t::del_my_locks): Drop useless counter lc. Close
lock object handle explicitely in case of called during fork. Add
comment to explain why.
* fork.cc (frok::child): Drop declaration of fixup_lockf_after_fork.
2012-02-17 Corinna Vinschen <corinna@vinschen.de> 2012-02-17 Corinna Vinschen <corinna@vinschen.de>
* timer.cc (getitimer): Don't create another local ret variable in * timer.cc (getitimer): Don't create another local ret variable in

View File

@ -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 Red Hat, Inc. Copyright 2003, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -347,14 +347,18 @@ inode_t::del_my_locks (long long id, HANDLE fhdl)
{ {
lockf_t *lock, *n_lock; lockf_t *lock, *n_lock;
lockf_t **prev = &i_lockf; lockf_t **prev = &i_lockf;
int lc = 0;
for (lock = *prev; lock && (n_lock = lock->lf_next, 1); lock = n_lock) for (lock = *prev; lock && (n_lock = lock->lf_next, 1); lock = n_lock)
{ {
if (lock->lf_flags & F_POSIX) if (lock->lf_flags & F_POSIX)
{ {
/* Delete all POSIX locks. */ /* Delete all POSIX locks. */
*prev = n_lock; *prev = n_lock;
++lc; /* When called during fork, the POSIX lock must get deleted but
*not* signalled. The lock is still active and locked in the
parent. So in case of fork, we call close_lock_obj explicitely,
since del_lock_obj is called from the destructor. */
if (!id)
lock->close_lock_obj ();
delete lock; delete lock;
} }
else if (id && lock->lf_id == id) else if (id && lock->lf_id == id)

View File

@ -1,7 +1,7 @@
/* fork.cc /* fork.cc
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011 Red Hat, Inc. 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc.
This file is part of Cygwin. This file is part of Cygwin.
@ -190,7 +190,6 @@ int __stdcall
frok::child (volatile char * volatile here) frok::child (volatile char * volatile here)
{ {
HANDLE& hParent = ch.parent; HANDLE& hParent = ch.parent;
extern void fixup_lockf_after_fork ();
extern void fixup_hooks_after_fork (); extern void fixup_hooks_after_fork ();
extern void fixup_timers_after_fork (); extern void fixup_timers_after_fork ();