Re: POE+Signals : The final solution

2009-07-19 Thread Rocco Caputo
Thanks for the patch.  Tony Cook also helped prevent this from being a  
penultimate solution by discussing some of the subtler issues.


I've applied the patch as revision 2576.  It tests clean here (OSX  
with Select, Event and IO::Poll; FreeBSD with Tk, Event, Select and  
IO::Poll).


As Philip mentioned, I plan to make a developer release next week for  
testing and a production 1.007 release if that goes well.  There's  
never too much testing, so feel free to check out a copy of the  
repository and begin your own QA procedures.


Thanks!

--
Rocco Caputo - rcap...@pobox.com


On Jul 19, 2009, at 00:37, Philip Gwyn wrote:


Hello POEers.

This is a heads-up about problems with POE and signals.  If you use  
a signal

handler in POE, you are probably affected.

As of 1.006, POE's event queue manipulation code isn't signal safe.   
If a signal

occurs while POE is removing an event from the queue (example:
$poe_kernel->remove_alarm( $aid )), there is a chance that POE will  
remove the
wrong element.  POE::Queue::XS::Array probably doesn't suffer from  
this
problem.  Long running daemons that fork a lot of sub-processes  
(example: pre-

or post-forking daemons) are highly susceptable to this problem.

What's more, there is a race condition between verifying the queue  
and calling

select() or poll().

You have probably been affected by this bug, without knowing it.  If  
you have
seen mysterious hanging processes, POE events that are going missing  
or other

heisenbugs, this bug is a prime suspect.

Rather then try patch around the problem, we are going to adopt a  
"final

solution" :

Semantically, the signal handlers and the main queue are running in  
different
threads.  The only robust way to implement threads is share- 
nothing.  This
means that the signal handlers have to talk to the main queue via  
some sort of

conduit like a socket or pipe.

The RT ticket is here :
  https://rt.cpan.org/Ticket/Display.html?id=47966

The second patch implements a signal pipe using POE::Pipe::OneWay,  
which is

highly portable. The previous unsafe behaviour is available if the
POE_USE_SIGNAL_PIPE=0 env var is set.

The patch has already been tested on Linux (CentOS 4) and Mac OS X  
against all
the POE::Loops that we could install.  If possible, it would be very  
much
appreciated if you could test it on your systems.  Report here on  
list or via

RT.

A developer release is planed, to see how much smoke the CPAN testers
release.  Then general CPAN release.

Thank you,

-Leolo







Version 1.008 Goal

2009-07-19 Thread Rocco Caputo
While the list is on the topic of event loops, I'd like to finally  
split POE::Loop::Event, POE::Loop::Gtk and POE::Loop::Tk into separate  
distributions for the 1.008 release.


They'll get better CPAN testers coverage as their own distributions  
with mandatory dependencies.  More test reports leads to more love,  
which may improve quality.


Thanks!

--
Rocco Caputo - rcap...@pobox.com