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