git://git.exim.org
/
users
/
heiko
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Events: Fix msg:defer event for the hosts_max_try_hardlimit case. Bug 2554
[users/heiko/exim.git]
/
src
/
exim_monitor
/
em_queue.c
diff --git
a/src/exim_monitor/em_queue.c
b/src/exim_monitor/em_queue.c
index fabec40dfe9812e67f87d96e82ebec15a16edc76..7a441cb866eb8359a4649a695411300ff422444f 100644
(file)
--- a/
src/exim_monitor/em_queue.c
+++ b/
src/exim_monitor/em_queue.c
@@
-138,7
+138,7
@@
acl_var_create(uschar *name)
{
tree_node *node, **root;
root = (name[0] == 'c')? &acl_var_c : &acl_var_m;
{
tree_node *node, **root;
root = (name[0] == 'c')? &acl_var_c : &acl_var_m;
-node = store_get(sizeof(tree_node) + Ustrlen(name));
+node = store_get(sizeof(tree_node) + Ustrlen(name)
, FALSE
);
Ustrcpy(node->name, name);
node->data.ptr = NULL;
(void)tree_insertnode(root, node);
Ustrcpy(node->name, name);
node->data.ptr = NULL;
(void)tree_insertnode(root, node);
@@
-156,7
+156,7
@@
set_up(uschar *name, int dir_char)
{
int i, rc, save_errno;
struct stat statdata;
{
int i, rc, save_errno;
struct stat statdata;
-
void *
reset_point;
+
rmark
reset_point;
uschar *p;
queue_item *q = (queue_item *)store_malloc(sizeof(queue_item));
uschar buffer[256];
uschar *p;
queue_item *q = (queue_item *)store_malloc(sizeof(queue_item));
uschar buffer[256];
@@
-182,7
+182,7
@@
Before reading the header remember the position in the dynamic store so that
we can recover the store into which the header is read. All data read by
spool_read_header that is to be preserved is copied into malloc store. */
we can recover the store into which the header is read. All data read by
spool_read_header that is to be preserved is copied into malloc store. */
-reset_point = store_
get(0
);
+reset_point = store_
mark(
);
message_size = 0;
message_subdir[0] = dir_char;
sprintf(CS buffer, "%s-H", name);
message_size = 0;
message_subdir[0] = dir_char;
sprintf(CS buffer, "%s-H", name);
@@
-222,11
+222,11
@@
if (rc != spool_read_OK)
struct stat statbuf;
sprintf(CS big_buffer, "%s/input/%s", spool_directory, buffer);
if (Ustat(big_buffer, &statbuf) == 0)
struct stat statbuf;
sprintf(CS big_buffer, "%s/input/%s", spool_directory, buffer);
if (Ustat(big_buffer, &statbuf) == 0)
- msg = string_sprintf("*** Format error in spool file: size =
%d
***",
+ msg = string_sprintf("*** Format error in spool file: size =
" OFF_T_FMT "
***",
statbuf.st_size);
statbuf.st_size);
- else msg =
string_sprintf("*** Format error in spool file ***")
;
+ else msg =
US"*** Format error in spool file ***"
;
}
}
- else msg =
string_sprintf("*** Cannot read spool file ***")
;
+ else msg =
US"*** Cannot read spool file ***"
;
if (rc == spool_read_hdrerror)
{
if (rc == spool_read_hdrerror)
{
@@
-234,7
+234,7
@@
if (rc != spool_read_OK)
}
else
{
}
else
{
- deliver_freeze = FALSE;
+
f.
deliver_freeze = FALSE;
sender_address = msg;
recipients_count = 0;
}
sender_address = msg;
recipients_count = 0;
}
@@
-242,9
+242,9
@@
if (rc != spool_read_OK)
/* Now set up the remaining data. */
/* Now set up the remaining data. */
-q->frozen = deliver_freeze;
+q->frozen =
f.
deliver_freeze;
-if (sender_set_untrusted)
+if (
f.
sender_set_untrusted)
{
if (sender_address[0] == 0)
{
{
if (sender_address[0] == 0)
{
@@
-463,7
+463,8
@@
code knows to look for them. We count the entries to set the value for the
queue stripchart, and set up data for the queue display window if the "full"
option is given. */
queue stripchart, and set up data for the queue display window if the "full"
option is given. */
-void scan_spool_input(int full)
+void
+scan_spool_input(int full)
{
int i;
int subptr;
{
int i;
int subptr;
@@
-471,8
+472,6
@@
int subdir_max = 1;
int count = 0;
int indexptr = 1;
queue_item *p;
int count = 0;
int indexptr = 1;
queue_item *p;
-struct dirent *ent;
-DIR *dd;
uschar input_dir[256];
uschar subdirs[64];
uschar input_dir[256];
uschar subdirs[64];
@@
-490,16
+489,18
@@
there is progress, output a dot for each one to the standard output. */
for (i = 0; i < subdir_max; i++)
{
int subdirchar = subdirs[i]; /* 0 for main directory */
for (i = 0; i < subdir_max; i++)
{
int subdirchar = subdirs[i]; /* 0 for main directory */
+ DIR *dd;
+ struct dirent *ent;
+
if (subdirchar != 0)
{
input_dir[subptr] = '/';
input_dir[subptr+1] = subdirchar;
}
if (subdirchar != 0)
{
input_dir[subptr] = '/';
input_dir[subptr+1] = subdirchar;
}
- dd = opendir(CS input_dir);
- if (dd == NULL) continue;
+ if (!(dd = exim_opendir(input_dir))) continue;
- while ((ent = readdir(dd))
!= NULL
)
+ while ((ent = readdir(dd)))
{
uschar *name = US ent->d_name;
int len = Ustrlen(name);
{
uschar *name = US ent->d_name;
int len = Ustrlen(name);
@@
-543,22
+544,23
@@
removing items, the total that we are comparing against isn't actually correct,
but in a long queue it won't make much difference, and in a short queue it
doesn't matter anyway!*/
but in a long queue it won't make much difference, and in a short queue it
doesn't matter anyway!*/
-p = queue_index[0];
-while (p != NULL)
- {
+for (p = queue_index[0]; p; )
if (!p->seen)
{
if (!p->seen)
{
- queue_item *next = p->next;
- if (p->prev == NULL) queue_index[0] = next;
- else p->prev->next = next;
- if (next == NULL)
+ queue_item * next = p->next;
+ if (p->prev)
+ p->prev->next = next;
+ else
+ queue_index[0] = next;
+ if (next)
+ next->prev = p->prev;
+ else
{
int i;
{
int i;
- queue_item *q = queue_index[queue_index_size-1];
+ queue_item *
q = queue_index[queue_index_size-1];
for (i = queue_index_size - 1; i >= 0; i--)
if (queue_index[i] == q) queue_index[i] = p->prev;
}
for (i = queue_index_size - 1; i >= 0; i--)
if (queue_index[i] == q) queue_index[i] = p->prev;
}
- else next->prev = p->prev;
clean_up(p);
queue_total--;
p = next;
clean_up(p);
queue_total--;
p = next;
@@
-566,22
+568,17
@@
while (p != NULL)
else
{
if (++count > (queue_total * indexptr)/(queue_index_size-1))
else
{
if (++count > (queue_total * indexptr)/(queue_index_size-1))
- {
queue_index[indexptr++] = p;
queue_index[indexptr++] = p;
- }
p->seen = FALSE; /* for next time */
p = p->next;
}
p->seen = FALSE; /* for next time */
p = p->next;
}
- }
/* If a lot of messages have been removed at the bottom, we may not
have got the index all filled in yet. Make sure all the pointers
are legal. */
while (indexptr < queue_index_size - 1)
/* If a lot of messages have been removed at the bottom, we may not
have got the index all filled in yet. Make sure all the pointers
are legal. */
while (indexptr < queue_index_size - 1)
- {
queue_index[indexptr++] = queue_index[queue_index_size-1];
queue_index[indexptr++] = queue_index[queue_index_size-1];
- }
}
}
@@
-614,7
+611,7
@@
static void update_recipients(queue_item *p)
{
int i;
FILE *jread;
{
int i;
FILE *jread;
-
void *
reset_point;
+
rmark
reset_point;
struct stat statdata;
uschar buffer[1024];
struct stat statdata;
uschar buffer[1024];
@@
-634,7
+631,7
@@
if (!(jread = fopen(CS buffer, "r")))
/* Get the contents of the header file; if any problem, just give up.
Arrange to recover the dynamic store afterwards. */
/* Get the contents of the header file; if any problem, just give up.
Arrange to recover the dynamic store afterwards. */
-reset_point = store_
get(0
);
+reset_point = store_
mark(
);
sprintf(CS buffer, "%s-H", p->name);
if (spool_read_header(buffer, FALSE, TRUE) != spool_read_OK)
{
sprintf(CS buffer, "%s-H", p->name);
if (spool_read_header(buffer, FALSE, TRUE) != spool_read_OK)
{