104 const char *myname =
"qmgr_entry_select";
107 if ((entry = queue->
todo.
prev) != 0) {
129 #define CONCURRENT_OR_BACK_TO_BACK_DELIVERY() \
130 (queue->busy_refcount > 1 || BACK_TO_BACK_DELIVERY())
132 #define BACK_TO_BACK_DELIVERY() \
133 (queue->last_done + 1 >= event_time())
144 msg_info(
"%s: allowing on-demand session caching for %s",
145 myname, queue->
name);
159 msg_info(
"%s: disallowing on-demand session caching for %s",
160 myname, queue->
name);
182 const char *myname =
"qmgr_entry_move_todo";
190 msg_panic(
"%s: destination queue %s is throttled", myname, dst->
name);
192 msg_panic(
"%s: destination transport %s is throttled",
214 const char *myname =
"qmgr_entry_done";
231 msg_panic(
"%s: bad queue spec: %d", myname, which);
254 msg_panic(
"%s: queue %s/%s: window %d > 1 on rate-limited service",
293 #define FUDGE(x) ((x) * (var_qmgr_fudge / 100.0))
322 entry->
queue = queue;
357 msg_warn(
"mail for %s is using up %d of %d active queue entries",
359 if (active_share < 0.9)
360 msg_warn(
"this may slow down other mail deliveries");
364 msg_warn(
"you may need to increase the main.cf %s%s from %d",
368 msg_warn(
"you may need to increase the main.cf %s from %d",
371 msg_warn(
"you may need a separate master.cf transport for %s",
374 msg_warn(
"you may need to reduce %s connect and helo timeouts",
376 msg_warn(
"so that Postfix quickly skips unavailable hosts");
377 msg_warn(
"you may need to increase the main.cf %s and %s",
379 msg_warn(
"so that Postfix wastes less time on undeliverable mail");
380 msg_warn(
"you may need to increase the master.cf %s process limit",
383 msg_warn(
"please avoid flushing the whole queue when you have");
384 msg_warn(
"lots of deferred mail, that is bad for performance");
385 msg_warn(
"to turn off these warnings specify: %s = 0",
int dest_concurrency_limit
NORETURN msg_panic(const char *fmt,...)
int var_qmgr_clog_warn_time
#define VAR_MAX_BACKOFF_TIME
void qmgr_queue_suspend(QMGR_QUEUE *, int)
#define QMGR_TRANSPORT_THROTTLED(t)
#define DEL_REQ_FLAG_CONN_MASK
int var_qmgr_active_limit
#define QMGR_LIST_APPEND(head, object)
void qmgr_queue_unthrottle(QMGR_QUEUE *)
#define CONCURRENT_OR_BACK_TO_BACK_DELIVERY()
void qmgr_entry_unselect(QMGR_QUEUE *queue, QMGR_ENTRY *entry)
void qmgr_entry_done(QMGR_ENTRY *entry, int which)
QMGR_MESSAGE * qmgr_message_realloc(QMGR_MESSAGE *)
#define VAR_QMGR_CLOG_WARN_TIME
void msg_warn(const char *fmt,...)
void qmgr_queue_done(QMGR_QUEUE *)
void qmgr_active_done(QMGR_MESSAGE *)
#define RCPT_LIST_INIT_QUEUE
QMGR_TRANSPORT * transport
void recipient_list_init(RECIPIENT_LIST *list, int variant)
#define QMGR_LIST_UNLINK(head, type, object)
void recipient_list_swap(RECIPIENT_LIST *a, RECIPIENT_LIST *b)
#define VAR_QMGR_ACT_LIMIT
void recipient_list_free(RECIPIENT_LIST *list)
QMGR_ENTRY * qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message)
#define DEL_REQ_FLAG_CONN_STORE
void qmgr_entry_move_todo(QMGR_QUEUE *dst, QMGR_ENTRY *entry)
#define QMGR_QUEUE_READY(q)
#define VAR_MIN_BACKOFF_TIME
QMGR_ENTRY * qmgr_entry_select(QMGR_QUEUE *queue)
#define BACK_TO_BACK_DELIVERY()
#define QMGR_QUEUE_THROTTLED(q)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)