isync

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

commit fd7b5659ab3e50782ce19f3011916949cc6628e0
parent e9efc49b6c1747da7256d0c276b97689f337f871
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sun, 29 Dec 2019 14:41:45 +0100

de-duplicate updating of uid in sync records

Diffstat:
Msrc/sync.c | 42++++++++++++++++++++----------------------
1 file changed, 20 insertions(+), 22 deletions(-)

diff --git a/src/sync.c b/src/sync.c @@ -245,6 +245,22 @@ jFprintf( sync_vars_t *svars, const char *msg, ... ) #define JLOG(...) JLOG_SEL(__VA_ARGS__, JLOG4, JLOG3, NO_JLOG2, NO_JLOG1)(__VA_ARGS__) static void +assign_uid( sync_vars_t *svars, sync_rec_t *srec, int t, uint uid ) +{ + srec->uid[t] = uid; + if (uid == svars->maxuid[t] + 1) + svars->maxuid[t] = uid; + srec->status &= ~S_PENDING; + srec->tuid[0] = 0; +} + +#define ASSIGN_UID(srec, t, nuid, ...) \ + do { \ + JLOG( "%c %u %u %u", ("<>"[t], srec->uid[F], srec->uid[N], nuid), __VA_ARGS__ ); \ + assign_uid( svars, srec, t, nuid ); \ + } while (0) + +static void match_tuids( sync_vars_t *svars, int t, message_t *msgs ) { sync_rec_t *srec; @@ -279,15 +295,10 @@ match_tuids( sync_vars_t *svars, int t, message_t *msgs ) num_lost++; continue; mfound: - JLOG( "%c %u %u %u", ("<>"[t], srec->uid[F], srec->uid[N], tmsg->uid), "TUID matched %s", diag ); tmsg->srec = srec; srec->msg[t] = tmsg; ntmsg = tmsg->next; - srec->uid[t] = tmsg->uid; - if (tmsg->uid == svars->maxuid[t] + 1) - svars->maxuid[t] = tmsg->uid; - srec->status = 0; - srec->tuid[0] = 0; + ASSIGN_UID( srec, t, tmsg->uid, "TUID matched %s", diag ); } } if (num_lost) @@ -944,19 +955,11 @@ load_state( sync_vars_t *svars ) break; case '<': debug( "far side now %u\n", t3 ); - srec->uid[F] = t3; - if (t3 == svars->maxuid[F] + 1) - svars->maxuid[F] = t3; - srec->status &= ~S_PENDING; - srec->tuid[0] = 0; + assign_uid( svars, srec, F, t3 ); break; case '>': debug( "near side now %u\n", t3 ); - srec->uid[N] = t3; - if (t3 == svars->maxuid[N] + 1) - svars->maxuid[N] = t3; - srec->status &= ~S_PENDING; - srec->tuid[0] = 0; + assign_uid( svars, srec, N, t3 ); break; case '*': debug( "flags now %u\n", t3 ); @@ -1851,12 +1854,7 @@ msg_copied( int sts, uint uid, copy_vars_t *vars ) if (!uid) { // Stored to a non-UIDPLUS mailbox svars->state[t] |= ST_FIND_NEW; } else { - JLOG( "%c %u %u %u", ("<>"[t], srec->uid[F], srec->uid[N], uid), "%sed message", str_hl[t] ); - vars->srec->uid[t] = uid; - if (uid == svars->maxuid[t] + 1) - svars->maxuid[t] = uid; - vars->srec->status &= ~S_PENDING; - vars->srec->tuid[0] = 0; + ASSIGN_UID( srec, t, uid, "%sed message", str_hl[t] ); } break; case SYNC_NOGOOD: