+2006-06-03 [colin] 2.2.0cvs76
+
+ * src/mbox.c
+ Fix bug #962 (Manual and/or UI should
+ warn about incompatible locking
+ causing dataloss)
+
2006-06-02 [cleroy] 2.2.0cvs75
* src/filtering.c
( cvs diff -u -r 1.1.2.6 -r 1.1.2.7 manual/fr/glossary.xml; cvs diff -u -r 1.1.2.3 -r 1.1.2.4 manual/fr/ack.xml; cvs diff -u -r 1.1.2.3 -r 1.1.2.4 manual/ack.xml; ) > 2.2.0cvs73.patchset
( cvs diff -u -r 1.115.2.88 -r 1.115.2.89 src/main.c; cvs diff -u -r 1.150.2.65 -r 1.150.2.66 src/procmsg.c; cvs diff -u -r 1.17.2.29 -r 1.17.2.30 src/send_message.c; cvs diff -u -r 1.43.2.45 -r 1.43.2.46 src/toolbar.c; ) > 2.2.0cvs74.patchset
( cvs diff -u -r 1.60.2.18 -r 1.60.2.19 src/filtering.c; cvs diff -u -r 1.213.2.95 -r 1.213.2.96 src/folder.c; cvs diff -u -r 1.150.2.66 -r 1.150.2.67 src/procmsg.c; cvs diff -u -r 1.395.2.214 -r 1.395.2.215 src/summaryview.c; ) > 2.2.0cvs75.patchset
+( cvs diff -u -r 1.28.2.15 -r 1.28.2.16 src/mbox.c; ) > 2.2.0cvs76.patchset
g_free(lockfile);
} else if (type == LOCK_FLOCK) {
gint lockfd;
+#if HAVE_FCNTL_H
+ struct flock fl;
+ fl.l_type = F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+#endif
#if HAVE_FLOCK
- if ((lockfd = open(base, O_RDONLY)) < 0) {
+ if ((lockfd = open(base, O_RDWR)) < 0) {
#else
if ((lockfd = open(base, O_RDWR)) < 0) {
#endif
FILE_OP_ERROR(base, "open");
return -1;
}
+
+#if HAVE_FCNTL_H
+ if (fcntl(lockfd, F_SETLK, &fl) == -1) {
+ g_warning("can't fnctl %s (%s)", base, strerror(errno));
+ return -1;
+ }
+#endif
+
#if HAVE_FLOCK
if (flock(lockfd, LOCK_EX|LOCK_NB) < 0) {
perror("flock");
return 0;
} else if (type == LOCK_FLOCK) {
+#if HAVE_FCNTL_H
+ struct flock fl;
+ fl.l_type = F_UNLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+
+ if (fcntl(fd, F_SETLK, &fl) == -1) {
+ g_warning("can't fnctl %s", base);
+ return -1;
+ }
+#endif
#if HAVE_FLOCK
if (flock(fd, LOCK_UN) < 0) {
perror("flock");