From 2eece822760c08f636282701493d058bf418cc92 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 1 Jan 2015 16:49:23 +0100 Subject: [PATCH] lock .uidvalidity on demand a maildir re-scan doesn't need to lock it if it doesn't need to allocate any new uids. --- src/drv_maildir.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/drv_maildir.c b/src/drv_maildir.c index 5ecf2c3..e3f455d 100644 --- a/src/drv_maildir.c +++ b/src/drv_maildir.c @@ -590,6 +590,10 @@ lcktmr_timeout( void *aux ) static int maildir_obtain_uid( maildir_store_t *ctx, int *uid ) { + int ret; + + if ((ret = maildir_uidval_lock( ctx )) != DRV_OK) + return ret; *uid = ++ctx->nuid; return maildir_store_uid( ctx ); } @@ -674,12 +678,6 @@ maildir_scan( maildir_store_t *ctx, msglist_t *msglist ) struct stat st; char buf[_POSIX_PATH_MAX], nbuf[_POSIX_PATH_MAX]; -#ifdef USE_DB - if (!ctx->db) -#endif /* USE_DB */ - if ((ret = maildir_uidval_lock( ctx )) != DRV_OK) - return ret; - again: msglist->ents = 0; msglist->nents = msglist->nalloc = 0; @@ -1329,8 +1327,7 @@ maildir_store_msg( store_t *gctx, msg_data_t *data, int to_trash, } else #endif /* USE_DB */ { - if ((ret = maildir_uidval_lock( ctx )) != DRV_OK || - (ret = maildir_obtain_uid( ctx, &uid )) != DRV_OK) { + if ((ret = maildir_obtain_uid( ctx, &uid )) != DRV_OK) { free( data->data ); cb( ret, 0, aux ); return;