lockf(LOCK_EX) would for instance drop any existing shared lock before taking
the exclusive lock. F_RDLCK/F_WRLCK need atomic changes, so introduce and use
__LOCK_ATOM
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
* misc/sys/file.h (__LOCK_ATOMIC): New macro.
* sysdeps/mach/hurd/fcntl.c (__libc_fcntl): Use __LOCK_ATOMIC along LOCK_SH and
LOCK_EX.
Gbp-Pq: Topic hurd-i386
Gbp-Pq: Name tg-WRLCK-upgrade.diff
#define LOCK_SH 1 /* Shared lock. */
#define LOCK_EX 2 /* Exclusive lock. */
#define LOCK_UN 8 /* Unlock. */
+#define __LOCK_ATOMIC 16 /* Atomic update. */
/* Can be OR'd in to one of the above. */
#define LOCK_NB 4 /* Don't block when locking. */
switch (type)
{
- case F_RDLCK: cmd = LOCK_SH; break;
- case F_WRLCK: cmd = LOCK_EX; break;
+ case F_RDLCK: cmd = LOCK_SH | __LOCK_ATOMIC; break;
+ case F_WRLCK: cmd = LOCK_EX | __LOCK_ATOMIC; break;
case F_UNLCK: cmd = LOCK_UN; break;
default:
errno = EINVAL;