--- In flexcoders@yahoogroups.com, "Ralf Bokelberg" <[EMAIL PROTECTED]>
wrote:
>
> Beeing able to dispatch events while we are dispatching an event is
> the expected behaviour. ActionScript doesn't have threads, so it's
> threadsafe per definition. In other words, it never happens, that an
> event interrupts a running method. If you dispatch an event while you
> are in another event handler, the new event is completely handled
> before the remaining handlers of the initial event are called. It's
> just simple method calls.
>
> 1 dispatch event 1
> 2   handle event 1
> 3       dispatch event 2
> 4           handle event 2
> 5           handle event 2
> 6    handle event 1
> 7    handle event 1
>
> So what is the exact problem you see? An exception in line 2 doesn't
> stop the rest of the handling?
>
> Cheers,
> Ralf.
>
> On 11/4/06, ncr100 [EMAIL PROTECTED] wrote:
> > This is a complex one.
> >
> > Summary:
> >
> > I believe I'm not confused with try/catch, but am surprised that the
> > EventDispatcher assumes our code is reentrant.  Reentrant like the
> > EventDispatcher is dispatching a system Event in the middle of me
> > handling other events.  So we're vulnerable to reentrant callbacks
> > when we call EventDispatcher.dispatchEvent.
> >
> > Details:
> >
> > Normally when an null dereference happens an Error is propagated up
> > the call stack to a catch handler.
> >
> > The bug is this: if in the middle of this call stack there happens
to
> > be an EventDispatcher.dispatchEvent call and the null pointer
happens
> > somewhere inside one of the listeners, then the Flash VM runtime
> > thingy / implementation of dispatchEvent() itself seems to catch &
> > handle the Error, and takes the opportunity to dispatch a pending
> > Events.  In my case I've seen a ProgressEvent.SOCKET_DATA being
> > dispatched because my server pumped out some data to me really
> > quickly, though I assume any pending Event could be dispatched.
> >
> > This really causes havoc because our methods aren't reentrant; flash
> > isn't multithreaded afaik and we don't think we have to write
> > everything thread-safe.
> >
> > Here's an illustration I will walk through.  At the start of the
stack
> > our DTVSocket.onSocketConnect listens for an
> > ProgressEvent.SOCKET_DATA, and just got one.  Notice for now the
> > EventDispatcher [no source] in the middle of the stack trace. 
Capping
> > off the stack trace, see our TextUtil.setText method ... it is doing
> > something bad, and has just triggered a null pointer exception!
> >
> > dtv.util::TextUtil$/setText       (BANG!  null pointer exception)
> > MarbachViewer/MarbachViewer::createChannelCanvas
> > MarbachViewer/MarbachViewer::subscribeToChannel
> > MarbachViewer/MarbachViewer::onConnected
> >
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEven\
tFunction
> > [no source]
> > flash.events::EventDispatcher/dispatchEvent [no source]
> > dtv.util::DTVSocket/dtv.util:DTVSocket::dispatchOnConnectedEvent
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onReceivedSessionTicket
> > Function/http://adobe.com/AS3/2006/builtin::call [no source]
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onJSON
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onData
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onSocketData
> >
> >
> > Now notice in this second shorter trace the stack has been unwound
up
> > to the dispatchEvent, but no further.  onSocketData was just passed
a
> > second, new ProgressEvent.SOCKET_DATA.  It must be that
> > EventDispatcher.dispatchEvent caught my setText's null pointer
> > exception and dispatched some additional socket data to my
> > ProgressEvent.SOCKET_DATA listener.  onSocketData is not thread
safe.
> >   and bad stuff will happen very soon after in our code.
> >
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onSocketData    (WHOA! Not
good)
> >
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEven\
tFunction
> > [no source]
> > flash.events::EventDispatcher/dispatchEvent [no source]
> > dtv.util::DTVSocket/dtv.util:DTVSocket::dispatchOnConnectedEvent
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onReceivedSessionTicket
> > Function/http://adobe.com/AS3/2006/builtin::call [no source]
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onJSON
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onData
> > dtv.util::DTVSocket/dtv.util:DTVSocket::onSocketData
> >
> >
> > So the deal is this: Beware of event listener entry-points being
> > called in a reentrant fashion if your app is handling an exception.
> > Kind of like someone hitting you when you're down, flash is asking
for
> > your app to do stuff when it's crippled.
> >
> > A solution is to wrap the guts of all entry points in try/catch
> > handlers.  Or maybe only for high-frequency entry points.
> >
> > I looked thru these links for insight, perhaps hints indicating this
> > kind of behavior but didn't find it:
> >
http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/js/html/wwhelp\
.htm?href=00001890.html
> >
http://livedocs.macromedia.com/flex/2/langref/statements.html#try..catch\
..finally
> >
> > Happy November!
> > Nick
> >
> >
> >
> >
> > --
> > Flexcoders Mailing List
> > FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
> > Yahoo! Groups Links
> >
> >
> >
> >
> >
>
>
> --
> Ralf Bokelberg [EMAIL PROTECTED]
> Flex & Flash Consultant based in Cologne/Germany
>





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/flexcoders/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to