CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/09/04 22:59:29
Modified files: . : ChangeLog server : sprite_instance.cpp Log message: * server/sprite_instance.cpp: always check if we've been unloaded by effect of a call to on_event(). Fixes bug #20974. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4221&r2=1.4222 http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.325&r2=1.326 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4221 retrieving revision 1.4222 diff -u -b -r1.4221 -r1.4222 --- ChangeLog 4 Sep 2007 22:15:56 -0000 1.4221 +++ ChangeLog 4 Sep 2007 22:59:29 -0000 1.4222 @@ -1,5 +1,10 @@ 2007-09-04 Sandro Santilli <[EMAIL PROTECTED]> + * server/sprite_instance.cpp: always check if we've been unloaded + by effect of a call to on_event(). Fixes bug #20974. + +2007-09-04 Sandro Santilli <[EMAIL PROTECTED]> + * server/parser/sprite_definition.cpp (read): simplify handling of malformed sprite definition (last SHOWFRAME not followed by END). Fixes high CPU use and inresponsiveness while playing Index: server/sprite_instance.cpp =================================================================== RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v retrieving revision 1.325 retrieving revision 1.326 diff -u -b -r1.325 -r1.326 --- server/sprite_instance.cpp 4 Sep 2007 20:50:00 -0000 1.325 +++ server/sprite_instance.cpp 4 Sep 2007 22:59:29 -0000 1.326 @@ -2269,6 +2269,8 @@ { //GNASH_REPORT_FUNCTION; + assert(!isUnloaded()); + // Process any pending loadVariables request processCompletedLoadVariableRequests(); @@ -2278,6 +2280,13 @@ if (m_on_event_load_called) { on_event(event_id::ENTER_FRAME); + if ( isUnloaded() ) + { + log_debug("%s enterFrame event handler unloaded self", getTarget().c_str()); + // TODO: check if we should still advance the frame counter + // can be checked, if we're still reachable, by fetching _currentframe. + return; + } } #ifdef GNASH_DEBUG @@ -2397,6 +2406,11 @@ log_msg(_("Calling ONLOAD event")); #endif on_event(event_id::LOAD); // clip onload + if (isUnloaded()) + { + log_debug("%s load event handler unloaded self", getTarget().c_str()); + return; + } if (m_has_key_event) { @@ -3343,6 +3357,8 @@ void sprite_instance::construct() { + assert(!isUnloaded()); + _origTarget = getTarget(); #ifdef GNASH_DEBUG @@ -3356,6 +3372,12 @@ assert( oldDisplayList.empty() ); on_event(event_id::CONSTRUCT); + if (isUnloaded()) + { + log_debug("%s construct event handler unloaded self", getTarget().c_str()); + // TODO: check if we should still execute frame tags (dlist ones in particular) + return; + } execute_frame_tags(0, TAG_DLIST|TAG_ACTION); _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit