Lock consistently. Other cleanups. [jmk] --rw-rw-r-- M 960117 glenda sys 11218 Dec 8 06:55 sys/src/9/ip/arp.c /n/sourcesdump/2005/1208/plan9/sys/src/9/ip/arp.c:598,620 - /n/sourcesdump/2005/1209/plan9/sys/src/9/ip/arp.c:598,612 else break; } + if(a == nil) + goto dodrops; - /* need to unlock arp, else will deadlock when icmpns - * wants to lock arp later. - */ - - qunlock(arp); - if(a == nil) - goto dodrops; // return 0; - + qunlock(arp); /* for icmpns */ if((sflag = ipv6anylocal(ifc, ipsrc)) != SRC_UNSPEC) icmpns(f, ipsrc, sflag, a->ip, TARG_MULTI, ifc->mac); runlock(ifc); - - /* grab lock on arp again */ - qlock(arp); /* put to the end of re-transmit chain */ [jmk] --rw-rw-r-- M 960117 jmk sys 29166 Dec 8 06:52 sys/src/9/pc/etherdp83820.c /n/sourcesdump/2005/1208/plan9/sys/src/9/pc/etherdp83820.c:1056,1061 - /n/sourcesdump/2005/1209/plan9/sys/src/9/pc/etherdp83820.c:1056,1063 delay(1); atc93c46r(ctlr, 0); + if(ctlr->eeprom == nil) + return -1; sum = 0; for(i = 0; i < 0x0E; i++){ r = atc93c46r(ctlr, i); [jmk] --rw-rw-r-- M 960117 glenda sys 1425 Dec 8 06:55 sys/src/9/port/alarm.c /n/sourcesdump/2005/1208/plan9/sys/src/9/port/alarm.c:4,12 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/alarm.c:4,11 #include "dat.h" #include "fns.h" - Alarms alarms; - Rendez alarmr; - Talarm talarm; + static Alarms alarms; + static Rendez alarmr; void alarmkproc(void*) [jmk] --rw-rw-r-- M 960117 glenda sys 22558 Dec 8 06:55 sys/src/9/port/portdat.h /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:40,46 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:40,45 typedef struct Sargs Sargs; typedef struct Schedq Schedq; typedef struct Segment Segment; - typedef struct Talarm Talarm; typedef struct Timer Timer; typedef struct Timers Timers; typedef struct Uart Uart; /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:89,100 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:88,93 int writer; /* number of writers */ }; - struct Talarm - { - Lock; - Proc *list; - }; - struct Alarms { QLock; /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:363,369 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:356,361 Page *pages[PTEPERTAB]; /* Page map for this chunk of pte */ Page **first; /* First used entry */ Page **last; /* Last used entry */ - Pte *next; /* Free list */ }; /* Segment types */ /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:416,422 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:408,414 Pte **map; int mapsize; Pte *ssegmap[SSEGMAPSIZE]; - ulong mark; /* portcountrefs */ + ulong mark; /* portcountrefs */ }; enum /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:599,606 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:591,596 PriRoot = 13, /* base priority for root processes */ }; - typedef uvlong Ticks; - struct Schedq { Lock; /n/sourcesdump/2005/1208/plan9/sys/src/9/port/portdat.h:768,774 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/portdat.h:758,763 extern char* statename[]; extern Image swapimage; extern char* sysname; - extern Talarm talarm; extern uint qiomaxatomic; enum [jmk] --rw-rw-r-- M 960117 glenda sys 22178 Dec 8 06:55 sys/src/9/port/sysfile.c /n/sourcesdump/2005/1208/plan9/sys/src/9/port/sysfile.c:582,588 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/sysfile.c:582,588 l = devtab[nc->type]->stat(nc, buf, nbuf); l = dirsetname(name, nname, buf, l, nbuf); if(l == BIT16SZ) - goto Norewrite; + error("dirsetname"); poperror(); /* [jmk] --rw-rw-r-- M 960117 glenda sys 15146 Dec 8 06:56 sys/src/9/port/sysproc.c /n/sourcesdump/2005/1208/plan9/sys/src/9/port/sysproc.c:568,575 - /n/sourcesdump/2005/1209/plan9/sys/src/9/port/sysproc.c:568,575 buf[ERRMAX-1] = 0; status = buf; } + poperror(); } - poperror(); } pexit(status, 1);