commit 2eece822760c08f636282701493d058bf418cc92
parent 4aad8c9e04976faf793f290c603ffda58c10448c
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date: Thu, 1 Jan 2015 16:49:23 +0100
lock .uidvalidity on demand
a maildir re-scan doesn't need to lock it if it doesn't need to allocate
any new uids.
Diffstat:
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git 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;