• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/postfix-255/postfix/src/qmgr/

Lines Matching defs:transport

5 /*	per-transport jobs
9 /* QMGR_JOB *qmgr_job_obtain(message, transport)
11 /* QMGR_TRANSPORT *transport;
19 /* QMGR_ENTRY *qmgr_job_entry_select(transport)
20 /* QMGR_TRANSPORT *transport;
25 /* These routines add/delete/manipulate per-transport jobs.
26 /* Each job corresponds to a specific transport and message.
31 /* transport combination. New empty job is created if no existing can
35 /* qmgr_job_free() disposes of a per-transport job after all
50 /* per-transport recipients limit among the per-transport jobs.
88 * because we don't know if all those unread recipients go to our transport yet.
94 #define RESET_CANDIDATE_CACHE(transport) ((transport)->candidate_cache_current = 0)
96 #define IS_BLOCKER(job,transport) ((job)->blocker_tag == (transport)->blocker_tag)
100 static QMGR_JOB *qmgr_job_create(QMGR_MESSAGE *message, QMGR_TRANSPORT *transport)
107 htable_enter(transport->job_byname, message->queue_id, (char *) job);
108 job->transport = transport;
131 QMGR_TRANSPORT *transport = job->transport;
159 * was read in-core (either of these can happen only for multi-transport
169 current = transport->job_current;
170 for (next = 0, prev = transport->job_list.prev; prev;
183 unread = transport->job_next_unread;
184 for (next = 0, prev = transport->job_bytime.prev; prev;
198 QMGR_LIST_LINK(transport->job_list, list_prev, job, list_next, transport_peers);
199 QMGR_LIST_LINK(transport->job_bytime, prev, job, next, time_peers);
205 transport->job_current = job;
212 unread = transport->job_next_unread;
213 transport->job_next_unread = job;
220 * to the transport pool as soon as the exact amount required is known
223 if (transport->rcpt_unused > 0) {
224 job->rcpt_limit += transport->rcpt_unused;
225 message->rcpt_limit += transport->rcpt_unused;
226 transport->rcpt_unused = 0;
230 /* qmgr_job_find - lookup job associated with named message and transport */
232 static QMGR_JOB *qmgr_job_find(QMGR_MESSAGE *message, QMGR_TRANSPORT *transport)
237 * transport hash table. This is better (at least with respect to memory
241 return ((QMGR_JOB *) htable_find(transport->job_byname, message->queue_id));
246 QMGR_JOB *qmgr_job_obtain(QMGR_MESSAGE *message, QMGR_TRANSPORT *transport)
252 * Create a new job for this transport/message combination otherwise. In
255 if ((job = qmgr_job_find(message, transport)) == 0)
256 job = qmgr_job_create(message, transport);
268 RESET_CANDIDATE_CACHE(transport);
269 if (IS_BLOCKER(job, transport)) {
271 transport->job_current = transport->job_list.next;
280 QMGR_TRANSPORT *transport = job->transport;
282 QMGR_JOB *next = transport->job_next_unread;
294 transport->job_next_unread = next;
306 * Transfer the unused recipient slots back to the transport pool and to
308 * accordingly. Note that the transport pool can be negative if we used
314 transport->rcpt_unused += rcpt_unused;
315 if (next != 0 && (rcpt_unused = transport->rcpt_unused) > 0) {
318 transport->rcpt_unused = 0;
342 QMGR_TRANSPORT *transport = job->transport;
363 if (transport->job_current == job)
364 transport->job_current = job->transport_peers.next;
369 if (job == transport->candidate_cache
370 || job == transport->candidate_cache_current)
371 RESET_CANDIDATE_CACHE(transport);
376 QMGR_LIST_UNLINK(transport->job_list, QMGR_JOB *, job, transport_peers);
377 QMGR_LIST_UNLINK(transport->job_bytime, QMGR_JOB *, job, time_peers);
396 * transport. The qmgr_entry_done() will make sure that the slots donated
397 * by this job are moved back to the transport pool as soon as possible.
416 QMGR_TRANSPORT *transport = job->transport;
419 msg_info("%s: %s %s", myname, message->queue_id, transport->name);
447 htable_delete(transport->job_byname, message->queue_id, (void (*) (char *)) 0);
478 if (job != job->transport->candidate_cache_current)
479 RESET_CANDIDATE_CACHE(job->transport);
486 QMGR_TRANSPORT *transport = current->transport;
505 if (transport->candidate_cache_current == current
506 && (transport->candidate_cache_time == now
507 || transport->candidate_cache == 0))
508 return (transport->candidate_cache);
516 + current->slots_available) / transport->slot_cost;
539 if (job->stack_children.next != 0 || IS_BLOCKER(job, transport))
563 transport->candidate_cache = best_job;
564 transport->candidate_cache_current = current;
565 transport->candidate_cache_time = now;
575 QMGR_TRANSPORT *transport = current->transport;
588 || MAX_ENTRIES(current) < transport->min_slots * transport->slot_cost)
622 if (current->slots_available / transport->slot_cost + transport->slot_loan
623 < expected_slots * transport->slot_loan_factor / 100.0)
636 QMGR_LIST_UNLINK(transport->job_list, QMGR_JOB *, job, transport_peers);
638 QMGR_LIST_LINK(transport->job_list, prev, job, current, transport_peers);
647 transport->job_current = job;
648 RESET_CANDIDATE_CACHE(transport);
663 current->slots_available -= expected_slots * transport->slot_cost;
670 * Note that transport->rcpt_unused is within <-rcpt_per_stack,0> in such
674 rcpt_slots = (transport->rcpt_per_stack + transport->rcpt_unused + 1) / 2;
677 transport->rcpt_unused -= rcpt_slots;
691 QMGR_TRANSPORT *transport = job->transport;
721 parent->slots_available -= job->slots_used * transport->slot_cost;
747 RESET_CANDIDATE_CACHE(transport);
758 QMGR_LIST_UNLINK(transport->job_list, QMGR_JOB *, job, transport_peers);
759 QMGR_LIST_LINK(transport->job_list, some_prev, job, some_next, transport_peers);
761 if (transport->job_current == job)
762 transport->job_current = job->transport_peers.next;
799 && (message->rcpt_limit - message->rcpt_count >= job->transport->refill_limit
801 && sane_time() - message->refill_time >= job->transport->refill_delay)))
829 QMGR_ENTRY *qmgr_job_entry_select(QMGR_TRANSPORT *transport)
838 if ((job = transport->job_current) == 0)
847 if (transport->slot_cost >= 2)
857 * jobs can appear in case of multi-transport messages whose recipients
861 * available to this transport. Or it can happen that the job has some
872 if (IS_BLOCKER(job, transport))
889 transport->job_current = job;
924 job->blocker_tag = transport->blocker_tag;
927 peer->queue->blocker_tag = transport->blocker_tag;
940 * must have changed since this transport was selected for asynchronous
944 transport->job_current = 0;
952 QMGR_TRANSPORT *transport = queue->transport;
957 * deliveries, give it a try and unmark all transport blockers at once.
966 * Keeping the transport blocker tag odd is an easy way to make sure the tag
969 if (queue->blocker_tag == transport->blocker_tag) {
971 transport->blocker_tag += 2;
972 transport->job_current = transport->job_list.next;
973 transport->candidate_cache_current = 0;