This version was released on 2002-06-02.

may break code: Rocco finally added the three-phase signal dispatch. This signal dispatch implements all-or-none session destruction by dispatching signals in three distinct steps:

  1. Dispatch the signal to sessions that requested it via
     $kernel->sig().
  2. Dispatch the signal to everyone else via _signal events.
  3. If ANY session has handled the signal, then no sessions are
     stopped.  Otherwise, all the sessions under the signal
     destination (the entire program, if that's $kernel) are stopped.

The all-or-none stopping more accurately reflects users' expectations of signals, as expressed through various forms of feedback.

may break code: Rocco implemented step 4 of the FooState deprecation in the POE::Wheel modules. POE RFCs/XyzState to XyzEvent has more details about this. This doesn't really change any compatibility, but it makes a lot of noise.

Rocco updated POE::Kernel so session IDs in TRACE_FOO and ASSERT_FOO will show aliases when possible.

Rocco added and documented sig_handled(). Rocco also cleaned up and finished revising the signal dispatch docs and deprecations. There is no deprecation warning at this time.

Rocco updated many of the tests so they did not implicitly handle signals.

Rocco updated FooState to FooEvent in POE::Component::Server::TCP. Client::TCP did not need the change.

Rocco removed the forced tracing from lib/deptest.perl when run on Solaris machines. Nobody seems to have encountered the problem that required it lately.

Iain Chalmers reported test results for MacPerl 5.6.1b4 on MacOS 9.1.

Rocco patched test 8 to avoid fork() on MacOS. Tests 11_signals_poe.t, 12_signals_ev.t, and 22_wheel_run.t also require fork() and are skipped.

Rocco patched POE::Wheel::Run to die outright on MacOS, since the module needs fork() and the OS doesn't support it.

may break code: Rocco gave the go-ahead to deprecate 5.004 and earlier versions of 5.005, seeing as 5.8 is on the verge of release.

Sungo rewrote Makefile.PL to use the magical ExtUtils::AutoInstall for Perl 5.005 or later. It preserves the existing behavior on Perl versions before 5.005, but it emits a deprecation warning in the process.

Rocco added more dependent modules to Makefile-5005.pm. He also deprecated Perl versions before 5.005_03 in Makefile.PL.

Peter Barabas discovered a subtle bug in Driver::SysRW's get() method. Rocco revised how it deals with sysread() errors, making the logic clearer in the process.

Ekkis found a system where POSIX::Termios::getospeed() on STDIN returned undef. Default the terminal output speed to 38400 in this case.

While writing a sample program for the POE::Cookbook, Rocco discovered that POE::Wheel::FollowTail would detect log file resets when none occurred. He fixed the way log file resets are detected, and it seems to work better now. Then, when that didn't work, he fixed it again.

Rocco confirmed that Tk's fileevent watchers are broken under Win32. He changed t/06_tk.t so that the I/O tests don't fail on Win32 if Tk is broken.

Rocco added CloseEvent to POE::Wheel::Run. This new event notifies a session when its child process has closed all its output filehandles. Thanks to Chris Fedde for suggesting it earlier this year.

Rocco added ARG4 to POE::Wheel::Run's ErrorEvent, per Chris Fedde's instructions earlier this year. This new parameter includes the name of the filehandle ON THE CHILD that have caused any errors.

(!!!) Rocco stopped supporting Wheel::Run for Win32 systems. There are too many problems with Win32::Process::Create, sockets, fork, and/or exec, to support it on that platform. The behaviors of these functions varies with different versions of Windows, and supporting the platform(s) consumes more time than Rocco has. If someone with multiple Windows platforms would like to take this over, please contact Rocco or POE's mailing list.

bline discovered a long-standing (but rarely, if ever heretofore tickled) bug in POE::Kernel's _internal_select(). Rocco tracked it down to a leftover hash key that wasn't removed when necessary. POE::Kernel is fixed, and t/04_selects.t has another test.

Rocco patched POE::Wheel::ReadLine to take a stab at the terminal type if a TERM environment variable isn't set. In other words, it assumes vt100.

Rocco patched POE::Wheel::Run to use POE::Filter::Line by default.

Rocco updated POE::Processor so it can dump new versions of files with the macros expanded in them. As bline mentioned, it is very much like `gcc -E`.

baud provided IO::Poll support for POE. Rocco applied it. This has the potential to increase performance for large scale clients and servers. We could really use a nice benchmark for this, though. Note for Windows users: IO::Poll seems to be broken on ActiveState build 631 (surprise!). A bug report has been filed with ActiveState (see: http://bugs.activestate.com/show_bug.cgi?id=19624). Until the issue is resolved, POE will use select() on Windows even when IO::Poll is requested.

Ted Suzman reported that the inconsistency check for child PID's >0 on MSWin32 was an error. He's right, negative PIDs are only for pseudo-fork via iThreads. Real processes on MSWin32 have ID's >0 too. Rocco removed the inconsistency check and added a test to make sure this works.

kane discovered much ickiness within POE::Wheel::ReadLine when combined with MSWin32. The parts where it was calling eval{} within BEGIN{} were causing ActiveState Perl build 631 to "segfault" as it were. Rocco was able to remove the BEGIN{} wrappers, and things worked much better after that.

Back to POE CHANGES.