112 const char *myname =
"qmgr_entry_select";
117 queue = entry->
queue;
141 #define CONCURRENT_OR_BACK_TO_BACK_DELIVERY() \
142 (queue->busy_refcount > 1 || BACK_TO_BACK_DELIVERY())
144 #define BACK_TO_BACK_DELIVERY() \
145 (queue->last_done + 1 >= event_time())
156 msg_info(
"%s: allowing on-demand session caching for %s",
157 myname, queue->
name);
171 msg_info(
"%s: disallowing on-demand session caching for %s",
172 myname, queue->
name);
205 const char *myname =
"qmgr_entry_move_todo";
215 msg_panic(
"%s: queue %s entry is busy", myname, src_queue->
name);
217 msg_panic(
"%s: destination queue %s is throttled", myname, dst_queue->
name);
219 msg_panic(
"%s: destination transport %s is throttled",
220 myname, dst_transport->
name);
251 const char *myname =
"qmgr_entry_done";
272 msg_panic(
"%s: bad queue spec: %d", myname, which);
311 msg_panic(
"%s: queue %s/%s: window %d > 1 on rate-limited service",
382 entry->
queue = queue;
418 msg_warn(
"mail for %s is using up %d of %d active queue entries",
420 if (active_share < 0.9)
421 msg_warn(
"this may slow down other mail deliveries");
425 msg_warn(
"you may need to increase the main.cf %s%s from %d",
429 msg_warn(
"you may need to increase the main.cf %s from %d",
432 msg_warn(
"you may need a separate master.cf transport for %s",
435 msg_warn(
"you may need to reduce %s connect and helo timeouts",
437 msg_warn(
"so that Postfix quickly skips unavailable hosts");
438 msg_warn(
"you may need to increase the main.cf %s and %s",
440 msg_warn(
"so that Postfix wastes less time on undeliverable mail");
441 msg_warn(
"you may need to increase the master.cf %s process limit",
444 msg_warn(
"please avoid flushing the whole queue when you have");
445 msg_warn(
"lots of deferred mail, that is bad for performance");
446 msg_warn(
"to turn off these warnings specify: %s = 0",
int dest_concurrency_limit
void qmgr_peer_free(QMGR_PEER *)
QMGR_JOB_LIST message_peers
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 *)
void qmgr_entry_unselect(QMGR_QUEUE *queue, QMGR_ENTRY *entry)
#define QMGR_QUEUE_SUSPENDED(q)
QMGR_JOB * qmgr_job_obtain(QMGR_MESSAGE *, QMGR_TRANSPORT *)
void qmgr_entry_done(QMGR_ENTRY *entry, int which)
#define VAR_QMGR_CLOG_WARN_TIME
QMGR_PEER * qmgr_peer_obtain(QMGR_JOB *, QMGR_QUEUE *)
void msg_warn(const char *fmt,...)
void qmgr_queue_done(QMGR_QUEUE *)
void qmgr_job_blocker_update(QMGR_QUEUE *)
void qmgr_active_done(QMGR_MESSAGE *)
#define RCPT_LIST_INIT_QUEUE
QMGR_TRANSPORT * transport
#define BACK_TO_BACK_DELIVERY()
QMGR_TRANSPORT * transport
#define CONCURRENT_OR_BACK_TO_BACK_DELIVERY()
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
#define QMGR_LIST_PREPEND(head, object)
void qmgr_entry_move_todo(QMGR_QUEUE *dst, QMGR_ENTRY *entry)
#define QMGR_QUEUE_READY(q)
#define VAR_MIN_BACKOFF_TIME
QMGR_ENTRY_LIST entry_list
void qmgr_job_move_limits(QMGR_JOB *)
QMGR_ENTRY * qmgr_entry_select(QMGR_QUEUE *queue)
#define QMGR_QUEUE_THROTTLED(q)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)