]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dbox: Split off dbox_mailbox_list_cleanup()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 20 Jun 2023 15:54:49 +0000 (18:54 +0300)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Wed, 28 Jun 2023 12:25:22 +0000 (14:25 +0200)
src/lib-storage/index/dbox-common/dbox-storage.c
src/lib-storage/index/dbox-common/dbox-storage.h

index b9f651f7468589d9a0d8af43e30de5e93ac8a138..35ab65cc5c468dd5f162a6d58083c4e1bac48865 100644 (file)
@@ -176,7 +176,7 @@ static time_t cleanup_interval(struct mailbox_list *list)
 {
        time_t interval = list->mail_set->mail_temp_scan_interval;
 
-       const char *username = list->ns->storage->user->username;
+       const char *username = list->ns->user->username;
        /* No need for a cryptographic-quality hash here. */
        unsigned int hash = crc32_str(username);
 
@@ -282,39 +282,45 @@ int dbox_mailbox_open(struct mailbox *box)
        return 0;
 }
 
-void dbox_mailbox_close_cleanup(struct mailbox *box)
+int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path,
+                             time_t last_temp_file_scan)
 {
-       if (box->view == NULL)
-               return;
-
-       const struct mail_index_header *hdr =
-               mail_index_get_header(box->view);
-
-       const char *box_path = mailbox_get_path(box);
-       time_t scan_time = hdr->last_temp_file_scan;
        time_t change_time = -1;
 
-       if (scan_time == 0) {
-               /* Try to fetch the scan time from dhe directory's atime
+       if (last_temp_file_scan == 0) {
+               /* Try to fetch the scan time from the directory's atime
                   if the directory exists. In case, get also the ctime */
                struct stat stats;
-               if (stat(box_path, &stats) == 0) {
-                       scan_time = stats.st_atim.tv_sec;
+               if (stat(path, &stats) == 0) {
+                       last_temp_file_scan = stats.st_atim.tv_sec;
                        change_time = stats.st_ctim.tv_sec;
                } else {
                        if (errno != ENOENT) {
-                               e_error(box->event,
-                                       "stat(%s) failed: %m", box_path);
+                               e_error(list->ns->user->event,
+                                       "stat(%s) failed: %m", path);
                        }
-                       return;
+                       return -1;
                }
        }
 
-       if (dbox_cleanup_temp_files(box->list, box_path, scan_time, change_time) ||
-               hdr->last_temp_file_scan == 0) {
+       if (dbox_cleanup_temp_files(list, path, last_temp_file_scan, change_time) ||
+           last_temp_file_scan == 0) {
                /* temp files were scanned. update the last scan timestamp. */
-               index_mailbox_update_last_temp_file_scan(box);
+               return 1;
        }
+       return 0;
+}
+
+void dbox_mailbox_close_cleanup(struct mailbox *box)
+{
+       if (box->view == NULL)
+               return;
+
+       const struct mail_index_header *hdr =
+               mail_index_get_header(box->view);
+       if (dbox_mailbox_list_cleanup(box->list, mailbox_get_path(box),
+                                     hdr->last_temp_file_scan) > 0)
+               index_mailbox_update_last_temp_file_scan(box);
 }
 
 void dbox_mailbox_close(struct mailbox *box)
index 9c614e730017aabdd8d85d6a1741dc17fdcfc187..9a85fee4d99942ccec36ae709d79df227045ff61 100644 (file)
@@ -76,6 +76,8 @@ int dbox_mailbox_check_existence(struct mailbox *box);
 int dbox_mailbox_open(struct mailbox *box);
 void dbox_mailbox_close(struct mailbox *box);
 void dbox_mailbox_close_cleanup(struct mailbox *box);
+int dbox_mailbox_list_cleanup(struct mailbox_list *list, const char *path,
+                             time_t last_temp_file_scan);
 int dbox_mailbox_create(struct mailbox *box,
                        const struct mailbox_update *update, bool directory);
 int dbox_mailbox_create_indexes(struct mailbox *box,