URI: 
       tadd locking - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b65f95f6d862d4177d6c50b7fc5715d04b215a8d
   DIR parent 19256e0dd9c3c383ada7cc28b67487400c9162e3
  HTML Author: rsc <devnull@localhost>
       Date:   Fri, 17 Feb 2006 19:30:59 +0000
       
       add locking
       
       Diffstat:
         M src/cmd/ndb/dnudpserver.c           |      11 +++++++++--
       
       1 file changed, 9 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/src/cmd/ndb/dnudpserver.c b/src/cmd/ndb/dnudpserver.c
       t@@ -21,6 +21,7 @@ struct Inprogress
                int        id;
        };
        Inprogress inprog[Maxactive+2];
       +QLock inproglk;
        
        /*
         *  record client id and ignore retransmissions.
       t@@ -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++){
       t@@ -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;
        }