Consider this program:

#!/usr/bin/perl -w
use strict;
# use Event;
use POE;

pipe(local *RD, local *WR) || die "Pipe: $!";
POE::Session->create(inline_states => {
    _start      => sub {
        $poe_kernel->alias_set("foo");
    },
    add => sub {
        $poe_kernel->select_read(\*RD, "readable");
    },
    readable    => sub {
        $poe_kernel->select_read(\*RD);
    },
});
$poe_kernel->call("foo", "add");
close WR;
$poe_kernel->run();

I would expect that to open a pipe, set an alias, then add a readability
watch on RD. Next the close will cause EOF for RD, so the readability will
trigger, and the watcher is removed. Now the kernel has no more work,
so I expect everything to clean up and exit (it should detect that the
alias can never get triggered anymore).

And this is what happens for all event cores I tested (Select, Poll and Tk)
except when I use the Event module. Uncomment the "use Event" line and the
program will hang in run().

(POE version is 0.28_04, Event version is 1.00).
--
The early bird may get the worm, but the second mouse gets the cheese.

Reply via email to