The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# vim: ts=2 sw=2 filetype=perl expandtab

# Passing a POE::Wheel or something into an event handler will cause
# that thing's destruction to be delayed until outside the session's
# event handler.  The result is a hard error.

use strict;

sub POE::Kernel::ASSERT_DEFAULT () { 1 }

BEGIN {
  package POE::Kernel;
  use constant TRACE_DEFAULT => exists($INC{'Devel/Cover.pm'});
}

use POE;
use POE::Wheel::ReadWrite;
use POE::Pipe::OneWay;

use Test::More tests => 1;

POE::Session->create(
  inline_states => {
    _start    => \&setup,
    got_input => sub { },
    destructo => \&die_die_die,
    _stop     => \&shutdown,
  }
);

POE::Kernel->run();
exit;

sub setup {
  my ($r, $w) = POE::Pipe::OneWay->new();
  my $wheel = POE::Wheel::ReadWrite->new(
    InputHandle => $r,
    OutputHandle => $w,
    InputEvent   => "got_input",
  );
  $_[KERNEL]->yield(destructo => $wheel);
  return;
}

sub die_die_die {
  return @_;  # What the heck, return it too just for perversity.
}

sub shutdown {
  pass("normal shutdown");
}