I now have a new problem (don't I always ;-).
ReadLine has a modification that I didn't spot earlier (due to our
inability to use the last few releases) that doesn't make sense to me.
The change labelled r2098 (which went into 0.37, I believe) does this:
2006-09-05 01:41:11 (r2098) by rcaputo; poe/lib/POE/Wheel/ReadLine.pm M
A cheezy hack to avoid destroying Wheel::ReadLine instances from
within POE::Kernel's space. A proper fix would be to somehow break
this wheel's circular references to $self so that DESTROY is
triggered immediately when the user destroys the objects' last
references.
I really really don't understand this. The hack is within DESTROY (i.e.
it's within the code that's called when the wheel is evaporating: by
definition there are no more references). The hack says if we're
evaporating and our parent session has already left the building, then
we will not do proper DESTROY semantics but will instead return. An
important result of this is that we won't bother resetting the terminal
mode back to normal. Which means that quite often after using this
module, the terminal will be screwed up. This isn't good. A quick hack
fix would be to always restore the terminal state before we hit the
conditional return. But then it leads me into where I don't understand:
why would we not want to do all of the cleanup? Even if the parent is
poe_kernel (i.e. our real session parent has already departed), we can
still do cleanup. We're in the DESTROY handler! Does it hurt to do any
of that cleanup? Is the comment saying something else? I don't
understand the reasoning behind this....
Nick
Rocco Caputo wrote:
You have a few hours to perhaps a day or two to prepare yourself for
the onslaught of goodness encapsulated in this release. Perhaps most
significantly, the two changes you've been waiting for all week (if
not longer):
+ The sig() reference count has been removed. There will be much
rejoicing, and probably some gnashing of teeth.
+ sig_child($pid, $event) was introduced. It waits for an explicit
process ID. It holds a session reference count. It automatically
clears after the specified process has been reaped and the event has
been delivered.
But that's not all. Other people were busy improving POE while I was
distracted by signals fixes. Give a big shout out to:
+ Apocalypse made alias_resolve() failures non-fatal when certain
assertions are enabled. Rob Bloodgood reported this problem, and
persisted in making sure it was fixed.
+ Vanilla Perl test failures were worked around. That distribution
is highly experimental. Its developers don't recommend its use. And
it isn't bundled with Win32::Console, needed by the Wheel::Run
tests. So those tests are skipped if that module isn't installed.
+ Martijn Van Beers documented some hook methods in POE::Session,
improving POE's kwalitee and passing the features on to you!
+ Matt Sickler applied a doc patch for TRACE_STATISTICS, submitted by
Joel Bernsein.
And some 0.37 test failures were fixed. And probably other stuff I
forgot. That's okay, though. There's a CHANGES file inside the
tarball, and it'll be more than happy to explain everything in much
greater detail.