hello i think i'll do the checkexit() and doublecheck again all exiting procs unlocks all the locks they had, as the only place to check is when a proc is waiting to read from the 9p pipe:
qlock(&iorlock); n = read9pmsg(mfd[0], io->mdata, messagesize); qunlock(&iorlock); thanks! gabi >> I have a couple of processes working together sharing memory and using >> locks, and when the program finish the job and exits, the proceses in Rendez >> state does not exit, and i need to slay them. >> >> I'm using postnote(PNGROUP,...) call, should i write a postctl to slay the >> waiting proceses or is there a better way to accomplish this? (may be using >> canlock and wait for it with a loop and sleep instead of a qlock?) > > looping on canq?lock is not a good idea. > > i think what you want is to ensure that no proc is > doing anything that shouldn't be interrupted when > it is killed or quits. for many programs, interrupting > writes is a bad idea. one would want a half-written > upas index file, for instance. rc checks a global sentinal at > a few strategic points (where it can clean up easily) > when it receives a signal. perhaps you could borrow > this technique, as in > > /* > * exit the building single file > */ > void > chkexit(QLock *q) > { > if(!exiting) > return; > qunlock(q) > cleanexit(); > } > ... > qlock(&resourcelk); > chkexit(&resourcelk); > ... > qunlock(&resourcelk); > > this might not be appropriate. the bad things > that might happen if your interrupted in the > middle of something might not be bad enough > to worry about or this might be difficult to implement > with your program. > > - erik