Jeff Clites <[EMAIL PROTECTED]> wrote:

> But anyway, I thought the call to Parrot_sigaction(SIGINT, ...) inside
> of Parrot_init_signals() was just for testing purposes anyway.

It's currently of course for testing only, w/o much usage or even
correctness, and it's linux only for now. But - as Dan did say - the
plan for Parrot is to install signal handlers by default.

As ponie isn't running a Parrot ops-loop it never sees the generated
exit event. For now there are two workarounds:

a) disable the Parrot_sigaction line
b) check for Parrot events

static int
do_exit(int code, void *interp)
{
    _exit(code);
}
static opcode_t*
run( Parrot_Interp interpreter, opcode_t *cur_op, opcode_t *start)
{
    ...
    Parrot_on_exit(do_exit, (void*)interpreter);
    while (count--) {
        if (! (count & 0xfff)) {
            Parrot_do_check_events(interpreter, NULL);

            printf(".");
            fflush(stdout);
        }
        make_a_pmc(interpreter);
    }
    ...

This is a snipped from the stress example program I posted some days ago
with an additional check if events are to be handled.  Both functions
might not be in the extension interface[1].

Signals are converted to Parrot events and in the case of a program
termination signal get broadcasted to all running interpreters.

[1] BTW: Why does Ponie use the rather limited extension interface?

> JEff

leo

Reply via email to