[dovecot-cvs] dovecot/src/lib-index mail-index-lock.c, 1.7, 1.8 mail-index-sync-update.c, 1.4, 1.5 mail-transaction-log.c, 1.5, 1.6

cras at procontrol.fi cras at procontrol.fi
Wed Apr 28 22:16:25 EEST 2004


Update of /home/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv12735/lib-index

Modified Files:
	mail-index-lock.c mail-index-sync-update.c 
	mail-transaction-log.c 
Log Message:
some more locking fixes



Index: mail-index-lock.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-lock.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- mail-index-lock.c	28 Apr 2004 18:52:06 -0000	1.7
+++ mail-index-lock.c	28 Apr 2004 19:16:23 -0000	1.8
@@ -230,8 +230,10 @@
 	if (fd == -1)
 		return -1;
 
-	if (index->lock_type == F_UNLCK)
-		(void)mail_index_lock_mprotect(index, F_RDLCK);
+	if (index->lock_type == F_UNLCK) {
+		if (mail_index_lock_mprotect(index, F_RDLCK) < 0)
+			return -1;
+	}
 
 	ret = write_full(fd, index->map->hdr, sizeof(*index->map->hdr));
 	if (ret < 0 || write_full(fd, index->map->records,
@@ -288,6 +290,7 @@
 		return -1;
 	}
 
+	(void)mail_index_lock_mprotect(index, F_WRLCK);
 	return 0;
 }
 
@@ -307,8 +310,10 @@
 	if (ret < 0)
 		return -1;
 
+	if (mail_index_lock_exclusive_copy(index) < 0)
+		return -1;
 	*lock_id_r = index->lock_id + 1;
-	return mail_index_lock_exclusive_copy(index);
+	return 0;
 }
 
 static int mail_index_copy_lock_finish(struct mail_index *index)

Index: mail-index-sync-update.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-index-sync-update.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- mail-index-sync-update.c	28 Apr 2004 02:39:03 -0000	1.4
+++ mail-index-sync-update.c	28 Apr 2004 19:16:23 -0000	1.5
@@ -220,6 +220,7 @@
 				map = mail_index_map_to_memory(map);
 				mail_index_unmap(index, index->map);
 				index->map = map;
+				index->hdr = map->hdr;
 				map->write_to_disk = TRUE;
 
 				dest_idx = rec.seq1-1;

Index: mail-transaction-log.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-index/mail-transaction-log.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mail-transaction-log.c	28 Apr 2004 02:39:03 -0000	1.5
+++ mail-transaction-log.c	28 Apr 2004 19:16:23 -0000	1.6
@@ -332,7 +332,6 @@
 			index->log_locked = FALSE;
 			return -1;
 		}
-		index->log_locked = FALSE;
 
 		ret = mail_index_map(index, FALSE);
 		if (ret > 0) {
@@ -347,6 +346,7 @@
 		}
 		hdr.file_seq = index->hdr->log_file_seq;
 		mail_index_unlock(index, lock_id);
+		index->log_locked = FALSE;
 
 		if (ret <= 0) {
 			(void)file_dotlock_delete(path, fd);



More information about the dovecot-cvs mailing list