aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Yano <takashi.yano@nifty.ne.jp>2024-10-20 00:59:51 +0900
committerTakashi Yano <takashi.yano@nifty.ne.jp>2024-10-31 15:34:32 +0900
commitf9cc21dc001acc2c90cfdb170c4bdd50f76770ea (patch)
tree991256e208b62c5266a9e51fedc27096c815ee3e
parent5e6eb2f200ce1c3ae7ae25140074bd37bc440aae (diff)
downloadnewlib-f9cc21dc001acc2c90cfdb170c4bdd50f76770ea.zip
newlib-f9cc21dc001acc2c90cfdb170c4bdd50f76770ea.tar.gz
newlib-f9cc21dc001acc2c90cfdb170c4bdd50f76770ea.tar.bz2
Cygwin: lockf: Fix adding a new lock over multiple locks
Previously, adding a new lock by lockf() over multiple existing locks failed. This is due to a bug that lf_setlock() tries to create a lock that has already been created. This patch fixes the issue. Addresses: https://cygwin.com/pipermail/cygwin/2024-October/256528.html Fixes: a998dd705576 ("* flock.cc: Implement all advisory file locking here.") Reported-by: Christian Franke <Christian.Franke@t-online.de> Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
-rw-r--r--winsup/cygwin/flock.cc7
-rw-r--r--winsup/cygwin/release/3.5.54
2 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc
index 0f1efa0..5550b3a 100644
--- a/winsup/cygwin/flock.cc
+++ b/winsup/cygwin/flock.cc
@@ -1454,13 +1454,14 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
/*
* Add the new lock before overlap.
*/
- if (needtolink) {
+ if (needtolink)
+ {
*prev = lock;
lock->lf_next = overlap;
- }
+ lock->create_lock_obj ();
+ }
overlap->lf_start = lock->lf_end + 1;
lf_wakelock (overlap, fhdl);
- lock->create_lock_obj ();
overlap->create_lock_obj ();
break;
}
diff --git a/winsup/cygwin/release/3.5.5 b/winsup/cygwin/release/3.5.5
index bcc2c66..ca96edf 100644
--- a/winsup/cygwin/release/3.5.5
+++ b/winsup/cygwin/release/3.5.5
@@ -12,3 +12,7 @@ Fixes:
Addresses: https://sourceware.org/pipermail/cygwin/2024-September/256468.html
- Fix timer_delete() return value which always indicated failure.
+
+- Fix lockf() error which occurs when adding a new lock over multiple
+ locks.
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-October/256528.html