X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=xmit.c;h=c4b1854717333b05249bf009e33387fe9b8d13de;hb=7f2f7562ac7c2fd27bfe2cf9f9edb87a6ce13c7f;hp=4f873f3872300466566b4b7177afa0d6142f5c49;hpb=0d0b89542d5657ecb96b02f35b1bfdd53c635cb2;p=innduct.git diff --git a/xmit.c b/xmit.c index 4f873f3..c4b1854 100644 --- a/xmit.c +++ b/xmit.c @@ -49,13 +49,20 @@ static Article *dequeue(int peek) { return 0; } +static void conn_inqueue_spare(const Conn *conn, + int *inqueue_r, int *spare_r) { + int inqueue= conn->sent.count + conn->priority.count + conn->waiting.count; + int spare= conn->max_queue - inqueue; + if (inqueue_r) *inqueue_r= inqueue; + if (spare_r) *spare_r= spare; +} + void check_assign_articles(void) { for (;;) { if (!dequeue(1)) break; Conn *walk, *use=0; - int spare=0, inqueue=0; /* Find a connection to offer this article. We prefer a busy * connection to an idle one, provided it's not full. We take the @@ -65,15 +72,16 @@ void check_assign_articles(void) { */ FOR_CONN(walk) { if (walk->quitting) continue; - inqueue= walk->sent.count + walk->priority.count - + walk->waiting.count; - spare= walk->max_queue - inqueue; + int inqueue, spare; + conn_inqueue_spare(walk, &inqueue, &spare); assert(inqueue <= max_queue_per_conn); assert(spare >= 0); if (inqueue==0) /*idle*/ { if (!use) use= walk; } else if (spare>0) /*working*/ { use= walk; break; } } if (use) { + int inqueue, spare; + conn_inqueue_spare(use, &inqueue, &spare); if (!inqueue) use->since_activity= 0; /* reset idle counter */ while (spare>0) { Article *art= dequeue(0); @@ -166,7 +174,7 @@ int article_check_expired(Article *art /* must be queued, not conn */) { LIST_REMOVE(art->ipf->queue, art); art->missing= 1; - art->ipf->count_nooffer_missing++; + art->ipf->counts.events[nooffer_missing]++; article_done(art,-1); return 1; } @@ -176,6 +184,7 @@ void inputfile_queue_check_expired(InputFile *ipf) { for (;;) { Article *art= LIST_HEAD(ipf->queue); + if (!art) break; int expd= article_check_expired(art); if (!expd) break; } @@ -321,7 +330,7 @@ void conn_make_some_xmits(Conn *conn) { (abort(),-1); if (!artdata) art->missing= 1; - art->ipf->counts[art->state][ artdata ? RC_sent : RC_missing ]++; + art->ipf->counts.results[art->state][ artdata ? RC_sent : RC_missing ]++; if (conn->stream) { if (artdata) { @@ -355,7 +364,7 @@ void conn_make_some_xmits(Conn *conn) { XMIT_LITERAL("\r\n"); assert(art->state == art_Unchecked); - art->ipf->counts[art->state][RC_sent]++; + art->ipf->counts.results[art->state][RC_sent]++; LIST_ADDTAIL(conn->sent, art); } }