remove legacy (bsd-style) locking
flock() may be implemented via fcntl(), which may cause the process to deadlock itself when trying to apply both types of locks. this is the case even on linux when the file lives on NFS. it's unlikely that anything except mbsync would try to access the .uidvalidity files anyway, so there is no point in trying to be compatible with anything else ... REFMAIL: uddy4g589ym.fsf@eismej-u14.spgear.lab.emc.com
This commit is contained in:
parent
682a05a676
commit
cda596d530
|
@ -33,15 +33,10 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/file.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
# define LEGACY_FLOCK 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(_POSIX_SYNCHRONIZED_IO) || _POSIX_SYNCHRONIZED_IO <= 0
|
#if !defined(_POSIX_SYNCHRONIZED_IO) || _POSIX_SYNCHRONIZED_IO <= 0
|
||||||
# define fdatasync fsync
|
# define fdatasync fsync
|
||||||
#endif
|
#endif
|
||||||
|
@ -550,13 +545,6 @@ maildir_uidval_lock( maildir_store_t *ctx )
|
||||||
/* The unlock timer is active, so we are obviously already locked. */
|
/* The unlock timer is active, so we are obviously already locked. */
|
||||||
return DRV_OK;
|
return DRV_OK;
|
||||||
}
|
}
|
||||||
#ifdef LEGACY_FLOCK
|
|
||||||
/* This is legacy only */
|
|
||||||
if (flock( ctx->uvfd, LOCK_EX ) < 0) {
|
|
||||||
error( "Maildir error: cannot flock UIDVALIDITY.\n" );
|
|
||||||
return DRV_BOX_BAD;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* This (theoretically) works over NFS. Let's hope nobody else did
|
/* This (theoretically) works over NFS. Let's hope nobody else did
|
||||||
the same in the opposite order, as we'd deadlock then. */
|
the same in the opposite order, as we'd deadlock then. */
|
||||||
#if SEEK_SET != 0
|
#if SEEK_SET != 0
|
||||||
|
@ -628,10 +616,6 @@ maildir_uidval_unlock( maildir_store_t *ctx )
|
||||||
#endif /* USE_DB */
|
#endif /* USE_DB */
|
||||||
lck.l_type = F_UNLCK;
|
lck.l_type = F_UNLCK;
|
||||||
fcntl( ctx->uvfd, F_SETLK, &lck );
|
fcntl( ctx->uvfd, F_SETLK, &lck );
|
||||||
#ifdef LEGACY_FLOCK
|
|
||||||
/* This is legacy only */
|
|
||||||
flock( ctx->uvfd, LOCK_UN );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue
Block a user