So, I've found the reason that recent releases of POE cause me to get memory leaks - I know others have had problems also, so I wanted to get an open discussion of what I'm being bitten by and possible ways to workaround this.

It turns out for me that my sessions aren't being garbage collected. In general, my POE system doesn't *require* the _stop event to be processed and so I never noticed this. However, peeking into the system shows a large number of sessions and I can see that none of the _stop events have been called.

This is because of the change:

     2005-11-07 06:59:07 (r1852) by hachi
     poe/lib/POE/Resource/Signals.pm M; poe/lib/POE/Resource/Sessions.pm M

       Change signal watchers so they keep sessions alive.
WARNING: This is a major semantics change in POE. It has the
       potential to make code 'hang' in places where it formerly did not.
This change is necessary so sessions expressing an interest in SIG
       CH?LD do not die prematurely. (There is a planned mandatory warning
       for reaped children that were not being watched.) This change fixes
       RT 15215.



The problem with this change is that if I set up a signal handler for something innocuous (e.g. to handle DIE, or one of my hand-rolled signals), this means that the session will do everything appropriately except be garbage collected. I think the intention of this change is reasonable, but to make it the default behavior for all possible signals is a bit keen. If I put in place a handler for a signal, it does NOT mean that I want to WAIT for the signal, it usually means that the signal shouldn't even happen, but that I'm putting in place a handler *in-case* it happens. It certainly shouldn't make my session persistent!

I'm not sure of "the best way" of fixing this. Possibly enhancing the API to have an explicity waitforsig() and maybesig()? (That's half tongue-in-cheek, but is actually one of the better solutions). In terms of "normal" API, a sig handler shouldn't block, so I would expect the sig() behaviour to follow that paradigm...

Thoughts, anyone?

Nick

Reply via email to