Lines Matching defs:evp
266 struct rq_envelope *evp;
275 while ((evp = TAILQ_FIRST(&update->q_pending))) {
276 TAILQ_REMOVE(&update->q_pending, evp, entry);
277 rq_envelope_delete(update, evp);
290 struct rq_envelope *evp;
297 evp = tree_xget(&msg->envelopes, si->evpid);
300 if (evp->state != RQ_EVPSTATE_INFLIGHT)
301 fatalx("evp:%016" PRIx64 " not in-flight", si->evpid);
303 TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry);
309 if (evp->flags & RQ_ENVELOPE_REMOVED) {
310 TAILQ_INSERT_TAIL(&ramqueue.q_removed, evp, entry);
311 evp->state = RQ_EVPSTATE_SCHEDULED;
312 evp->t_scheduled = currtime;
316 evp->sched = scheduler_next(evp->ctime,
319 evp->state = RQ_EVPSTATE_PENDING;
320 if (!(evp->flags & RQ_ENVELOPE_SUSPEND))
321 sorted_insert(&ramqueue, evp);
323 si->nexttry = evp->sched;
332 struct rq_envelope *evp;
339 evp = tree_xget(&msg->envelopes, evpid);
342 if (evp->state != RQ_EVPSTATE_INFLIGHT)
343 fatalx("evp:%016" PRIx64 " not in-flight", evpid);
345 TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry);
347 rq_envelope_delete(&ramqueue, evp);
359 struct rq_envelope *evp;
366 evp = tree_xget(&msg->envelopes, evpid);
369 if (evp->state != RQ_EVPSTATE_INFLIGHT)
370 fatalx("evp:%016" PRIx64 " not in-flight", evpid);
372 TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry);
375 if (evp->flags & RQ_ENVELOPE_SUSPEND) {
376 evp->state = RQ_EVPSTATE_PENDING;
380 hq = tree_get(&holdqs[evp->type], holdq);
384 tree_xset(&holdqs[evp->type], holdq, hq);
390 evp->state = RQ_EVPSTATE_PENDING;
391 evp->flags |= RQ_ENVELOPE_UPDATE;
392 evp->flags |= RQ_ENVELOPE_OVERFLOW;
393 sorted_insert(&ramqueue, evp);
398 evp->state = RQ_EVPSTATE_HELD;
399 evp->holdq = holdq;
406 TAILQ_INSERT_HEAD(&hq->q, evp, entry);
417 struct rq_envelope *evp;
434 evp = TAILQ_FIRST(&hq->q);
435 if (evp == NULL)
438 TAILQ_REMOVE(&hq->q, evp, entry);
440 evp->holdq = 0;
446 evp->state = RQ_EVPSTATE_PENDING;
448 evp->flags |= RQ_ENVELOPE_UPDATE;
449 sorted_insert(&ramqueue, evp);
465 struct rq_envelope *evp;
480 if (mask & SCHED_REMOVE && (evp = TAILQ_FIRST(&ramqueue.q_removed))) {
481 TAILQ_REMOVE(&ramqueue.q_removed, evp, entry);
483 evpids[i] = evp->evpid;
484 rq_envelope_delete(&ramqueue, evp);
490 if (mask & SCHED_EXPIRE && (evp = TAILQ_FIRST(&ramqueue.q_expired))) {
491 TAILQ_REMOVE(&ramqueue.q_expired, evp, entry);
493 evpids[i] = evp->evpid;
494 rq_envelope_delete(&ramqueue, evp);
500 if (mask & SCHED_UPDATE && (evp = TAILQ_FIRST(&ramqueue.q_update))) {
501 TAILQ_REMOVE(&ramqueue.q_update, evp, entry);
503 evpids[i] = evp->evpid;
505 if (evp->flags & RQ_ENVELOPE_OVERFLOW)
507 else if (evp->type == D_MTA)
512 evp->sched = scheduler_next(evp->ctime, t, 0);
513 evp->flags &= ~(RQ_ENVELOPE_UPDATE|RQ_ENVELOPE_OVERFLOW);
514 evp->state = RQ_EVPSTATE_PENDING;
515 if (!(evp->flags & RQ_ENVELOPE_SUSPEND))
516 sorted_insert(&ramqueue, evp);
522 if (mask & SCHED_BOUNCE && (evp = TAILQ_FIRST(&ramqueue.q_bounce))) {
523 TAILQ_REMOVE(&ramqueue.q_bounce, evp, entry);
525 evpids[i] = evp->evpid;
527 TAILQ_INSERT_TAIL(&ramqueue.q_inflight, evp, entry);
528 evp->state = RQ_EVPSTATE_INFLIGHT;
529 evp->t_inflight = currtime;
535 if (mask & SCHED_MDA && (evp = TAILQ_FIRST(&ramqueue.q_mda))) {
536 TAILQ_REMOVE(&ramqueue.q_mda, evp, entry);
538 evpids[i] = evp->evpid;
540 TAILQ_INSERT_TAIL(&ramqueue.q_inflight, evp, entry);
541 evp->state = RQ_EVPSTATE_INFLIGHT;
542 evp->t_inflight = currtime;
548 if (mask & SCHED_MTA && (evp = TAILQ_FIRST(&ramqueue.q_mta))) {
549 TAILQ_REMOVE(&ramqueue.q_mta, evp, entry);
551 evpids[i] = evp->evpid;
553 TAILQ_INSERT_TAIL(&ramqueue.q_inflight, evp, entry);
554 evp->state = RQ_EVPSTATE_INFLIGHT;
555 evp->t_inflight = currtime;
573 if ((evp = TAILQ_FIRST(&ramqueue.q_pending))) {
574 if (evp->sched < evp->expire)
575 t = evp->sched;
577 t = evp->expire;
606 struct rq_envelope *evp;
616 (void**)&evp) == 0)
619 if (evp->flags & (RQ_ENVELOPE_REMOVED | RQ_ENVELOPE_EXPIRED))
622 dst[n].evpid = evp->evpid;
627 if (evp->state == RQ_EVPSTATE_PENDING) {
628 dst[n].time = evp->sched;
631 else if (evp->state == RQ_EVPSTATE_SCHEDULED) {
632 dst[n].time = evp->t_scheduled;
635 else if (evp->state == RQ_EVPSTATE_INFLIGHT) {
636 dst[n].time = evp->t_inflight;
639 else if (evp->state == RQ_EVPSTATE_HELD) {
641 dst[n].time = evp->t_scheduled;
645 if (evp->flags & RQ_ENVELOPE_SUSPEND)
658 struct rq_envelope *evp;
669 if ((evp = tree_get(&msg->envelopes, evpid)) == NULL)
671 if (evp->state == RQ_EVPSTATE_INFLIGHT)
673 rq_envelope_schedule(&ramqueue, evp);
682 while (tree_iter(&msg->envelopes, &i, NULL, (void*)(&evp))) {
683 if (evp->state == RQ_EVPSTATE_INFLIGHT)
685 rq_envelope_schedule(&ramqueue, evp);
696 struct rq_envelope *evp;
707 if ((evp = tree_get(&msg->envelopes, evpid)) == NULL)
709 if (rq_envelope_remove(&ramqueue, evp))
719 while (tree_iter(&msg->envelopes, &i, NULL, (void*)(&evp)))
720 if (rq_envelope_remove(&ramqueue, evp))
730 struct rq_envelope *evp;
741 if ((evp = tree_get(&msg->envelopes, evpid)) == NULL)
743 if (rq_envelope_suspend(&ramqueue, evp))
753 while (tree_iter(&msg->envelopes, &i, NULL, (void*)(&evp)))
754 if (rq_envelope_suspend(&ramqueue, evp))
764 struct rq_envelope *evp;
775 if ((evp = tree_get(&msg->envelopes, evpid)) == NULL)
777 if (rq_envelope_resume(&ramqueue, evp))
787 while (tree_iter(&msg->envelopes, &i, NULL, (void*)(&evp)))
788 if (rq_envelope_resume(&ramqueue, evp))
811 sorted_insert(struct rq_queue *rq, struct rq_envelope *evp)
815 SPLAY_INSERT(prioqtree, &rq->q_priotree, evp);
816 evp2 = SPLAY_NEXT(prioqtree, &rq->q_priotree, evp);
818 TAILQ_INSERT_BEFORE(evp2, evp, entry);
820 TAILQ_INSERT_TAIL(&rq->q_pending, evp, entry);
877 struct rq_envelope *evp;
881 while ((evp = TAILQ_FIRST(&rq->q_pending))) {
882 if (evp->sched > currtime && evp->expire > currtime)
888 if (evp->state != RQ_EVPSTATE_PENDING)
889 fatalx("evp:%016" PRIx64 " flags=0x%x", evp->evpid,
890 evp->flags);
892 if (evp->expire <= currtime) {
893 TAILQ_REMOVE(&rq->q_pending, evp, entry);
894 SPLAY_REMOVE(prioqtree, &rq->q_priotree, evp);
895 TAILQ_INSERT_TAIL(&rq->q_expired, evp, entry);
896 evp->state = RQ_EVPSTATE_SCHEDULED;
897 evp->flags |= RQ_ENVELOPE_EXPIRED;
898 evp->t_scheduled = currtime;
901 rq_envelope_schedule(rq, evp);
907 rq_envelope_list(struct rq_queue *rq, struct rq_envelope *evp)
909 switch (evp->state) {
914 if (evp->flags & RQ_ENVELOPE_EXPIRED)
916 if (evp->flags & RQ_ENVELOPE_REMOVED)
918 if (evp->flags & RQ_ENVELOPE_UPDATE)
920 if (evp->type == D_MTA)
922 if (evp->type == D_MDA)
924 if (evp->type == D_BOUNCE)
926 fatalx("%016" PRIx64 " bad evp type %d", evp->evpid, evp->type);
935 fatalx("%016" PRIx64 " bad state %d", evp->evpid, evp->state);
940 rq_envelope_schedule(struct rq_queue *rq, struct rq_envelope *evp)
945 switch (evp->type) {
957 if (evp->flags & RQ_ENVELOPE_UPDATE)
960 if (evp->state == RQ_EVPSTATE_HELD) {
961 hq = tree_xget(&holdqs[evp->type], evp->holdq);
962 TAILQ_REMOVE(&hq->q, evp, entry);
965 tree_xpop(&holdqs[evp->type], evp->holdq);
968 evp->holdq = 0;
971 else if (!(evp->flags & RQ_ENVELOPE_SUSPEND)) {
972 TAILQ_REMOVE(&rq->q_pending, evp, entry);
973 SPLAY_REMOVE(prioqtree, &rq->q_priotree, evp);
976 TAILQ_INSERT_TAIL(q, evp, entry);
977 evp->state = RQ_EVPSTATE_SCHEDULED;
978 evp->t_scheduled = currtime;
982 rq_envelope_remove(struct rq_queue *rq, struct rq_envelope *evp)
987 if (evp->flags & (RQ_ENVELOPE_REMOVED | RQ_ENVELOPE_EXPIRED))
992 if (evp->state == RQ_EVPSTATE_INFLIGHT) {
993 evp->flags |= RQ_ENVELOPE_REMOVED;
997 if (evp->state == RQ_EVPSTATE_HELD) {
998 hq = tree_xget(&holdqs[evp->type], evp->holdq);
999 TAILQ_REMOVE(&hq->q, evp, entry);
1002 tree_xpop(&holdqs[evp->type], evp->holdq);
1005 evp->holdq = 0;
1008 else if (!(evp->flags & RQ_ENVELOPE_SUSPEND)) {
1009 evl = rq_envelope_list(rq, evp);
1010 TAILQ_REMOVE(evl, evp, entry);
1012 SPLAY_REMOVE(prioqtree, &rq->q_priotree, evp);
1015 TAILQ_INSERT_TAIL(&rq->q_removed, evp, entry);
1016 evp->state = RQ_EVPSTATE_SCHEDULED;
1017 evp->flags |= RQ_ENVELOPE_REMOVED;
1018 evp->t_scheduled = currtime;
1024 rq_envelope_suspend(struct rq_queue *rq, struct rq_envelope *evp)
1029 if (evp->flags & RQ_ENVELOPE_SUSPEND)
1032 if (evp->state == RQ_EVPSTATE_HELD) {
1033 hq = tree_xget(&holdqs[evp->type], evp->holdq);
1034 TAILQ_REMOVE(&hq->q, evp, entry);
1037 tree_xpop(&holdqs[evp->type], evp->holdq);
1040 evp->holdq = 0;
1041 evp->state = RQ_EVPSTATE_PENDING;
1044 else if (evp->state != RQ_EVPSTATE_INFLIGHT) {
1045 evl = rq_envelope_list(rq, evp);
1046 TAILQ_REMOVE(evl, evp, entry);
1048 SPLAY_REMOVE(prioqtree, &rq->q_priotree, evp);
1051 evp->flags |= RQ_ENVELOPE_SUSPEND;
1057 rq_envelope_resume(struct rq_queue *rq, struct rq_envelope *evp)
1061 if (!(evp->flags & RQ_ENVELOPE_SUSPEND))
1064 if (evp->state != RQ_EVPSTATE_INFLIGHT) {
1065 evl = rq_envelope_list(rq, evp);
1067 sorted_insert(rq, evp);
1069 TAILQ_INSERT_TAIL(evl, evp, entry);
1072 evp->flags &= ~RQ_ENVELOPE_SUSPEND;
1078 rq_envelope_delete(struct rq_queue *rq, struct rq_envelope *evp)
1080 tree_xpop(&evp->message->envelopes, evp->evpid);
1081 if (tree_empty(&evp->message->envelopes)) {
1082 tree_xpop(&rq->messages, evp->message->msgid);
1083 free(evp->message);
1087 free(evp);
1098 (void)snprintf(buf, sizeof buf, "evp:%016" PRIx64 " [", e->evpid);