> 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

Reply via email to