Added log_selector=+queue_time_overall.
[exim.git] / src / src / deliver.c
index 741d7b79cc31baec27ec1ba1a7d9aa64e9c8df50..b2e9ea58c3b8ded5d7d13aaa25e5c5bed32486a0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/deliver.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
+/* $Cambridge: exim/src/src/deliver.c,v 1.3 2004/11/24 14:38:13 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -1046,12 +1046,15 @@ else
     setflag(addr, af_ignore_error);
 
   /* Freeze the message if requested, or if this is a bounce message (or other
-  message with null sender). However, don't freeze if errors are being ignored.
-  The actual code to ignore occurs later, instead of sending a message. Logging
-  of freezing occurs later, just before writing the -H file. */
+  message with null sender) and this address does not have its own errors
+  address. However, don't freeze if errors are being ignored. The actual code
+  to ignore occurs later, instead of sending a message. Logging of freezing
+  occurs later, just before writing the -H file. */
 
   if (!testflag(addr, af_ignore_error) &&
-      (addr->special_action == SPECIAL_FREEZE || sender_address[0] == 0))
+      (addr->special_action == SPECIAL_FREEZE ||
+        (sender_address[0] == 0 && addr->p.errors_address == NULL)
+      ))
     {
     frozen_info = (addr->special_action == SPECIAL_FREEZE)? US"" :
       (sender_local && !local_error_message)?
@@ -6312,14 +6315,21 @@ if (addr_defer == NULL)
     }
 
   /* Remove the two message files. */
-
+  
   sprintf(CS spoolname, "%s/input/%s/%s-D", spool_directory, message_subdir, id);
   if (Uunlink(spoolname) < 0)
     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s", spoolname);
   sprintf(CS spoolname, "%s/input/%s/%s-H", spool_directory, message_subdir, id);
   if (Uunlink(spoolname) < 0)
     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s", spoolname);
-  log_write(0, LOG_MAIN, "Completed");
+
+  /* Log the end of this message, with queue time if requested. */
+
+  if ((log_extra_selector & LX_queue_time_overall) != 0)
+    log_write(0, LOG_MAIN, "Completed QT=%s", 
+      readconf_printtime(time(NULL) - received_time));
+  else
+    log_write(0, LOG_MAIN, "Completed");
   }
 
 /* If there are deferred addresses, we are keeping this message because it is