diff options
author | venaas <venaas> | 2007-01-08 16:47:37 +0000 |
---|---|---|
committer | venaas <venaas@e88ac4ed-0b26-0410-9574-a7f39faa03bf> | 2007-01-08 16:47:37 +0000 |
commit | 036bbbf5d85699187824ecf808414f40f0d5594f (patch) | |
tree | 2b36eae9a1f1c7835352ddd0e3d1134a8870ac51 | |
parent | ec6870142cd361a16ff11fd655b94a7fd4dbabcb (diff) |
bug fixing
git-svn-id: https://svn.testnett.uninett.no/radsecproxy/trunk@34 e88ac4ed-0b26-0410-9574-a7f39faa03bf
-rw-r--r-- | radsecproxy.c | 19 | ||||
-rw-r--r-- | radsecproxy.h | 1 |
2 files changed, 14 insertions, 6 deletions
diff --git a/radsecproxy.c b/radsecproxy.c index 5abdd16..4f16987 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -494,17 +494,24 @@ void sendrq(struct server *to, struct client *from, struct request *rq) { int i; pthread_mutex_lock(&to->newrq_mutex); - - /* should search from where inserted last */ - for (i = 0; i < MAX_REQUESTS; i++) + /* might simplify if only try nextid, might be ok */ + for (i = to->nextid; i < MAX_REQUESTS; i++) if (!to->requests[i].buf) break; if (i == MAX_REQUESTS) { - printf("No room in queue, dropping request\n"); - pthread_mutex_unlock(&to->newrq_mutex); - return; + for (i = 0; i < to->nextid; i++) + if (!to->requests[i].buf) + break; + if (i == to->nextid) { + printf("No room in queue, dropping request\n"); + pthread_mutex_unlock(&to->newrq_mutex); + return; + } } + + to->nextid = i + 1; rq->buf[1] = (char)i; + printf("sendrq: inserting packet with id %d in queue for %s\n", i, to->peer.host); if (!createmessageauth(rq->buf, rq->messageauthattrval, to->peer.secret)) return; diff --git a/radsecproxy.h b/radsecproxy.h index e3fc1cd..7ad2002 100644 --- a/radsecproxy.h +++ b/radsecproxy.h @@ -95,6 +95,7 @@ struct server { pthread_t clientth; struct timeval lastconnecttry; uint8_t connectionok; + int nextid; struct request *requests; uint8_t newrq; pthread_mutex_t newrq_mutex; |