chiark
/
gitweb
/
~ian
/
innduct.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
11f46c4
)
Recalculate inqueue/spare for use properly
author
Ian Jackson
<ian@liberator.relativity.greenend.org.uk>
Fri, 28 May 2010 21:42:53 +0000
(22:42 +0100)
committer
Ian Jackson
<ian@liberator.relativity.greenend.org.uk>
Fri, 28 May 2010 21:42:53 +0000
(22:42 +0100)
xmit.c
patch
|
blob
|
history
diff --git
a/xmit.c
b/xmit.c
index 4f873f3872300466566b4b7177afa0d6142f5c49..8adb082271a572c1842581e1d703326e8d0dd2f1 100644
(file)
--- a/
xmit.c
+++ b/
xmit.c
@@
-49,13
+49,20
@@
static Article *dequeue(int peek) {
return 0;
}
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;
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
/* 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;
*/
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) {
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(walk, &inqueue, &spare);
if (!inqueue) use->since_activity= 0; /* reset idle counter */
while (spare>0) {
Article *art= dequeue(0);
if (!inqueue) use->since_activity= 0; /* reset idle counter */
while (spare>0) {
Article *art= dequeue(0);