Thanks Philip for your suggestion. I was able to get it to work with
the a USR1 signal. Heres what I ended up doing
In the server code that uses the PoCoIKCServer I create a parent
session with some inline states.
In the state for _start, I register a CANCEL signal handler
I have a state that creates the PoCoGenerics with spawn and saves a
reference to the returned value in the parent session's heap.
In the state that handles the cancel requests I signal CANCEL on the
parent session.
In the CANCEL signal handler I iterate over the PoCoGenerics in the
heap pulling their PIDS from the {wheel}->PID and calling kill('USR1',
$childpid).
I had to modify the PoCoGenericChild to properly handle the signals.
I ended up defining a signal handler for SIGUSR1 using
POSIX::sigaction with a closure around a call to the objects signal
handler. From within the signal handler, I execute some code then I
call $self->loop so that the child process does not exit.
Ty
|