Mark variables that are unused before release of store in the queue-list loop
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 24 Mar 2018 13:43:01 +0000 (13:43 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 24 Mar 2018 13:43:01 +0000 (13:43 +0000)
doc/doc-txt/ChangeLog
src/src/queue.c

index fc392f60e2a0d46d667ff59eea5041d956b0f3ac..651508b7c62e21c57aa2f3eaff4858aefdf28cf1 100644 (file)
@@ -148,9 +148,9 @@ JH/28 Ensure that variables possibly set during message acceptance are marked
       dead before release of memory in the daemon loop.  This stops complaints
       about them when the debug_store option is enabled.  Discovered specifically
       for sender_rate_period, but applies to a whole set of variables.
-      Do the same for the queue-runner loop, for variables set from spool
-      message files.  Do the same for the SMTP per-message loop, for certain
-      variables indirectly set in ACL operations.
+      Do the same for the queue-runner and queue-list loops, for variables set
+      from spool message files.  Do the same for the SMTP per-message loop, for
+      certain variables indirectly set in ACL operations.
 
 JH/29 Bug 2250: Fix a longstanding bug in heavily-pipelined SMTP input (such
       as a multi-recipient message from a mailinglist manager).  The coding had
index c9ce3a2c8dbddad62fb1c0740137e76f43978e4d..3ae2a70a9cd4ec37cd6b2024e73a2f5145d13119 100644 (file)
@@ -854,7 +854,10 @@ if (option >= 8) option -= 8;
 /* Now scan the chain and print information, resetting store used
 each time. */
 
-for (reset_point = store_get(0); f; f = f->next)
+for (reset_point = store_get(0);
+    f;
+    spool_clear_header_globals(), store_reset(reset_point), f = f->next
+    )
   {
   int rc, save_errno;
   int size = 0;
@@ -863,7 +866,8 @@ for (reset_point = store_get(0); f; f = f->next)
   message_size = 0;
   message_subdir[0] = f->dir_uschar;
   rc = spool_read_header(f->text, FALSE, count <= 0);
-  if (rc == spool_read_notopen && errno == ENOENT && count <= 0) goto next;
+  if (rc == spool_read_notopen && errno == ENOENT && count <= 0)
+    continue;
   save_errno = errno;
 
   env_read = (rc == spool_read_OK || rc == spool_read_hdrerror);
@@ -933,7 +937,7 @@ for (reset_point = store_get(0); f; f = f->next)
     if (rc != spool_read_hdrerror)
       {
       printf("\n\n");
-      goto next;
+      continue;
       }
     }
 
@@ -948,24 +952,14 @@ for (reset_point = store_get(0); f; f = f->next)
       tree_node *delivered =
         tree_search(tree_nonrecipients, recipients_list[i].address);
       if (!delivered || option != 1)
-        printf("        %s %s\n", (delivered != NULL)? "D":" ",
-          recipients_list[i].address);
+        printf("        %s %s\n",
+         delivered ? "D" : " ", recipients_list[i].address);
       if (delivered) delivered->data.val = TRUE;
       }
     if (option == 2 && tree_nonrecipients)
       queue_list_extras(tree_nonrecipients);
     printf("\n");
     }
-
-next:
-  received_protocol = NULL;
-  sender_fullhost = sender_helo_name =
-  sender_rcvhost = sender_host_address = sender_address = sender_ident = NULL;
-  sender_host_authenticated = authenticated_sender = authenticated_id = NULL;
-  interface_address = NULL;
-  acl_var_m = NULL;
-
-  store_reset(reset_point);
   }
 }