From b65f95f6d862d4177d6c50b7fc5715d04b215a8d Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 17 Feb 2006 19:30:59 +0000 Subject: add locking --- src/cmd/ndb/dnudpserver.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cmd/ndb/dnudpserver.c b/src/cmd/ndb/dnudpserver.c index 9e4ac4af..7ac3ac2e 100755 --- a/src/cmd/ndb/dnudpserver.c +++ b/src/cmd/ndb/dnudpserver.c @@ -21,6 +21,7 @@ struct Inprogress int id; }; Inprogress inprog[Maxactive+2]; +QLock inproglk; /* * record client id and ignore retransmissions. @@ -32,6 +33,7 @@ clientrxmit(DNSmsg *req, uchar *buf) Inprogress *p, *empty; Udphdr *uh; + qlock(&inproglk); uh = (Udphdr *)buf; empty = 0; for(p = inprog; p < &inprog[Maxactive]; p++){ @@ -43,17 +45,22 @@ clientrxmit(DNSmsg *req, uchar *buf) if(req->id == p->id) if(req->qd->owner == p->owner) if(req->qd->type == p->type) - if(memcmp(uh, &p->uh, Udphdrsize) == 0) + if(memcmp(uh, &p->uh, Udphdrsize) == 0){ + qunlock(&inproglk); return 0; + } } - if(empty == 0) + if(empty == 0){ + qunlock(&inproglk); return 0; /* shouldn't happen - see slave() and definition of Maxactive */ + } empty->id = req->id; empty->owner = req->qd->owner; empty->type = req->qd->type; memmove(&empty->uh, uh, Udphdrsize); empty->inuse = 1; + qunlock(&inproglk); return empty; } -- cgit v1.2.3