isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

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:
Msrc/drv_maildir.c | 13+++++--------
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;