Its not impossible, its just more trouble to terminate a session. POE suffers from poor huffman encoding as it is, adding more obligatory code to do simple things makes it worse. Now I have to put a line to register the signal, one to deregister it, and a "stop" state, just to make sure I deregister the signal, and I have to make sure all terminating states yield to "stop" instead of just not yielding when terminating.
Except for the UI_DESTROYED, how many signals do sessions really wait for before terminating, as opposed to using them informationaly? Maybe have a call to stop the current session: $KERNEL->stop_session() The session stops, no question asked, lose all the aliases, all the signals, all the postback/callback become invalid, etc... and _stop gets called, not necessarily in that order. -Mathieu --- Rocco Caputo <[EMAIL PROTECTED]> wrote: > Do you have a use case where it's impossible to do > something under > the new behavior? I'm working under the assumption that > a session > can always find a way to call sig(YOUR_SIGNAL_HERE => > undef) when > it's ready to be destroyed. > > To be fair regarding discussions on this list, Jonathan > Steinert > announced the intent to make sig() hold sessions alive in > his 19 > October 2005 message titled "Nastiness, and wrapping up > signal > reforms". I replied that day with: > > > Big change. I don't mind this; the old semantics of > not holding a > > reference count were tied to _signal, which delivered > signals > > without sessions explicitly asking for them. _signal > is gone now, > > so we can tie the explicit interest of sig() into a > reference count > > to keep the session alive. > > Nobody else responded. 17 days later I replied with a > public go- > ahead to make the change. > > -- > Rocco Caputo - [EMAIL PROTECTED] > > > On Aug 21, 2006, at 09:58, Nick Williams wrote: > > > There appears to be a lack of opinion on this issue. > Would it be > > therefore reasonable to backout the signal change in > POE? Or can > > anyone suggest a way around the problem? > > > > Nick. > > > > [EMAIL PROTECTED] wrote: > > > >> On Wed, 2 Aug 2006, Mathieu Longtin wrote: > >> > >> > >>> It was my understanding that a session would stay > alive as > >>> long as it has child sessions. Did that behavior > change? > >>> > >> > >> No, this is not down to a child session - AFAIK, the > behaviour > >> there has > >> not changed. > >> > >> > >>> I'm in agreement with Nick here. If a session is > stritly > >>> waiting for a child session to finish, then have it > call > >>> waitpid. > >>> > >>> $_[KERNEL]->wait_for_child($session, "state", @args); > >>> > >>> wait_for_child would add a link back to the current > >>> session, the same way set_delay does. > >>> > >> > >> The issue is not wait_for_child, it's wait_for_signal > (which doesn't > >> exist). The original problem report was that people > were confused by > >> setting up a signal handler for UIDESTROY didn't make > the session > >> persistent. That is standard signal semantics and the > persistence > >> could've easily been changed by using aliases. > >> > >> The new behaviour in POE (as of .3202) is that when > placing a signal > >> handler on a session, e.g. > >> $kernel->sig('uidestroy', 'do_something'); > >> that will now increment the reference count of the > session and > >> therefore > >> make that session persistent until the signal handler > is deleted via > >> something (and note, not within the _stop event, since > we don't > >> get that > >> far). > >> > >> Nick. > >> > >> > >>> -Mathieu > >>> > >>> > >>> --- Nick Williams <[EMAIL PROTECTED]> > wrote: > >>> > >>> > >>>> 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? > >>>> > === message truncated === __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com