]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Use less memory from data stack.
authorTimo Sirainen <tss@iki.fi>
Mon, 3 Aug 2009 20:01:04 +0000 (16:01 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 3 Aug 2009 20:01:04 +0000 (16:01 -0400)
--HG--
branch : HEAD

src/lib-storage/index/index-mail.h
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/mail-storage.c

index 079e8163c3861fba3869d190c97468ee53d1592f..26940ce23452d952c0c5743723a9f5ee7311e631 100644 (file)
@@ -77,7 +77,7 @@ struct index_mail_data {
        uint32_t parse_line_num;
 
        struct message_part *parts;
-       const char *envelope, *body, *bodystructure, *uid_string;
+       const char *envelope, *body, *bodystructure, *uid_string, *guid;
        struct message_part_envelope_data *envelope_data;
 
        uint32_t seq;
index eb9ef726b8c3ef7ed9f5039d640e3217e9e85b0a..69e04f5fd1d411e79393c7a4ae036112e0b754b8 100644 (file)
@@ -424,6 +424,10 @@ maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
        switch (field) {
        case MAIL_FETCH_UIDL_FILE_NAME:
        case MAIL_FETCH_GUID:
+               if (mail->data.guid != NULL) {
+                       *value_r = mail->data.guid;
+                       return 0;
+               }
                if (_mail->uid != 0) {
                        if (maildir_mail_get_fname(mbox, _mail, &fname) <= 0)
                                return -1;
@@ -434,7 +438,10 @@ maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
                        fname = fname != NULL ? fname + 1 : path;
                }
                end = strchr(fname, MAILDIR_INFO_SEP);
-               *value_r = end == NULL ? fname : t_strdup_until(fname, end);
+               mail->data.guid = end == NULL ?
+                       p_strdup(mail->data_pool, fname) :
+                       p_strdup_until(mail->data_pool, fname, end);
+               *value_r = mail->data.guid;
                return 0;
        case MAIL_FETCH_UIDL_BACKEND:
                uidl = maildir_uidlist_lookup_ext(mbox->uidlist, _mail->uid,
index 9768b4b53d194a6a71ff8620db6c0b3b58163336..25931e65503133aa92601ddda4f6e4897d3730be 100644 (file)
@@ -599,11 +599,16 @@ void mailbox_get_status(struct mailbox *box,
 struct mailbox_sync_context *
 mailbox_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
 {
+       struct mailbox_sync_context *ctx;
+
        if (box->transaction_count != 0) {
                i_panic("Trying to sync mailbox %s with open transactions",
                        box->name);
        }
-       return box->v.sync_init(box, flags);
+       T_BEGIN {
+               ctx = box->v.sync_init(box, flags);
+       } T_END;
+       return ctx;
 }
 
 bool mailbox_sync_next(struct mailbox_sync_context *ctx,