Mercurial > dovecot > original-hg > dovecot-1.2
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; }