diff src/lib-index/mail-cache-fields.c @ 2929:ba9062032877 HEAD

Locking fixes and cleanups
author Timo Sirainen <tss@iki.fi>
date Sat, 04 Dec 2004 23:55:41 +0200
parents d416b6d0a7ee
children 2ab037df6cf3
line wrap: on
line diff
--- a/src/lib-index/mail-cache-fields.c	Sat Dec 04 21:46:59 2004 +0200
+++ b/src/lib-index/mail-cache-fields.c	Sat Dec 04 23:55:41 2004 +0200
@@ -275,23 +275,15 @@
 	}
 }
 
-int mail_cache_header_fields_update(struct mail_cache *cache)
+static int mail_cache_header_fields_update_locked(struct mail_cache *cache)
 {
-	int locked = cache->locked;
 	buffer_t *buffer;
 	uint32_t i, offset;
 	int ret = 0;
 
-	if (!locked) {
-		if (mail_cache_lock(cache) <= 0)
-			return -1;
-	}
-
 	if (mail_cache_header_fields_read(cache) < 0 ||
-	    mail_cache_header_fields_get_offset(cache, &offset) < 0) {
-		mail_cache_unlock(cache);
+	    mail_cache_header_fields_get_offset(cache, &offset) < 0)
 		return -1;
-	}
 
 	t_push();
 	buffer = buffer_create_dynamic(pool_datastack_create(), 256);
@@ -321,8 +313,21 @@
 	if (ret == 0)
 		cache->field_header_write_pending = FALSE;
 
-	if (!locked)
-		mail_cache_unlock(cache);
+	return ret;
+}
+
+int mail_cache_header_fields_update(struct mail_cache *cache)
+{
+	int ret;
+
+	if (cache->locked)
+		return mail_cache_header_fields_update_locked(cache);
+
+	if (mail_cache_lock(cache) <= 0)
+		return -1;
+
+	ret = mail_cache_header_fields_update_locked(cache);
+	mail_cache_unlock(cache);
 	return ret;
 }