]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
push-notification: Small optimization - don't lookup uidvalidity for each message.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 22 Apr 2016 13:00:36 +0000 (16:00 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 22 Apr 2016 13:00:36 +0000 (16:00 +0300)
src/plugins/push-notification/push-notification-txn-msg.c

index 65e64537ecddf2a6adbf324f2adb1fe47aab9a52..ebc9e2fbf4f17dd4ca2eb674917b74558a73d4f4 100644 (file)
@@ -45,7 +45,7 @@ push_notification_txn_msg_end(struct push_notification_txn *ptxn,
     struct push_notification_driver_txn **dtxn;
     struct seq_range_iter siter;
     struct mailbox_status status;
-    uint32_t uid;
+    uint32_t uid, uid_validity;
     struct push_notification_txn_msg *value;
 
     if (!hash_table_is_created(ptxn->messages)) {
@@ -55,20 +55,21 @@ push_notification_txn_msg_end(struct push_notification_txn *ptxn,
     hiter = hash_table_iterate_init(ptxn->messages);
     seq_range_array_iter_init(&siter, &changes->saved_uids);
 
+    /* uid_validity is only set in changes if message is new. */
+    if (changes->uid_validity == 0) {
+        mailbox_get_open_status(ptxn->mbox, STATUS_UIDVALIDITY, &status);
+        uid_validity = status.uidvalidity;
+    } else {
+        uid_validity = changes->uid_validity;
+    }
+
     while (hash_table_iterate(hiter, ptxn->messages, &key, &value)) {
         if (value->uid == 0) {
             if (seq_range_array_iter_nth(&siter, value->seq, &uid)) {
                 value->uid = uid;
             }
         }
-
-        /* uid_validity is only set in changes if message is new. */
-        if (changes->uid_validity == 0) {
-            mailbox_get_open_status(ptxn->mbox, STATUS_UIDVALIDITY, &status);
-            value->uid_validity = status.uidvalidity;
-        } else {
-            value->uid_validity = changes->uid_validity;
-        }
+        value->uid_validity = uid_validity;
 
         array_foreach_modifiable(&ptxn->drivers, dtxn) {
             if ((*dtxn)->duser->driver->v.process_msg != NULL) {