flock: Fix hang in object collision case

* flock.cc (lockf_t::create_lock_obj): Correctly recreate lock object
	attributes anew in each loop.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2015-11-12 13:14:08 +01:00
parent e6459123e4
commit 914620a7e6
3 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2015-11-12 Corinna Vinschen <corinna@vinschen.de>
* flock.cc (lockf_t::create_lock_obj): Correctly recreate lock object
attributes anew in each loop.
2015-11-12 Corinna Vinschen <corinna@vinschen.de> 2015-11-12 Corinna Vinschen <corinna@vinschen.de>
* init.cc (munge_threadfunc): Don't call NtQueryInformationThread with * init.cc (munge_threadfunc): Don't call NtQueryInformationThread with

View File

@ -766,12 +766,12 @@ lockf_t::create_lock_obj ()
{ {
lockfattr_t attr; lockfattr_t attr;
NTSTATUS status; NTSTATUS status;
PSECURITY_DESCRIPTOR sd_buf = alloca (SD_MIN_SIZE);
POBJECT_ATTRIBUTES lock_obj_attr; POBJECT_ATTRIBUTES lock_obj_attr;
lock_obj_attr = create_lock_obj_attr (&attr, OBJ_INHERIT,
alloca (SD_MIN_SIZE));
do do
{ {
lock_obj_attr = create_lock_obj_attr (&attr, OBJ_INHERIT, sd_buf);
status = NtCreateEvent (&lf_obj, CYG_EVENT_ACCESS, lock_obj_attr, status = NtCreateEvent (&lf_obj, CYG_EVENT_ACCESS, lock_obj_attr,
NotificationEvent, FALSE); NotificationEvent, FALSE);
if (!NT_SUCCESS (status)) if (!NT_SUCCESS (status))

View File

@ -12,3 +12,8 @@ Bug Fixes
- The fix for wine introduced in 2.3.0 crashes in 32 bit Cygwin on 64 bit XP - The fix for wine introduced in 2.3.0 crashes in 32 bit Cygwin on 64 bit XP
and 64 bit Server 2003 only. This should work now. and 64 bit Server 2003 only. This should work now.
Addresses: https://cygwin.com/ml/cygwin/2015-11/msg00187.html Addresses: https://cygwin.com/ml/cygwin/2015-11/msg00187.html
- The fix to avoid a potential crash in advisory file locking introduced in
2.3.0 waas not entirely correct and failed to work in certain border cases.
This should work now.
Addresses: https://cygwin.com/ml/cygwin/2015-11/msg00189.html