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.


Reply via email to