[PATCH 1/2] Cygwin: lockf: Fix adding a new lock over multiple locks

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Oct 22 16:03:42 GMT 2024


Hi Takashi,

On Oct 20 18:26, Takashi Yano wrote:
> 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:
> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
> ---
>  winsup/cygwin/flock.cc | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc
> index 0f1efa01d..5550b3a5b 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;
>  	}
> -- 
> 2.45.1

LGTM.

Thanks,
Corinna


More information about the Cygwin-patches mailing list