gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp


From: Zou Lunkai
Subject: [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp
Date: Thu, 07 Jun 2007 07:28:24 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Zou Lunkai <zoulunkai>  07/06/07 07:28:24

Modified files:
        .              : ChangeLog 
        server         : sprite_instance.cpp 

Log message:
        avoid using possibly invalidated interators

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3476&r2=1.3477
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.283&r2=1.284

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3476
retrieving revision 1.3477
diff -u -b -r1.3476 -r1.3477
--- ChangeLog   6 Jun 2007 17:49:01 -0000       1.3476
+++ ChangeLog   7 Jun 2007 07:28:23 -0000       1.3477
@@ -1,3 +1,8 @@
+2007-06-07 Zou Lunkai <address@hidden>
+
+       * server/sprite_instance.cpp: improved call_frame_actions(), 
+         avoid using possibly invalidated interators.
+       
 2007-06-06 Sandro Santilli <address@hidden>
 
        * server/swf/tag_loader.cpp (fixme_loader): warn only once for each

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.283
retrieving revision 1.284
diff -u -b -r1.283 -r1.284
--- server/sprite_instance.cpp  28 May 2007 09:35:34 -0000      1.283
+++ server/sprite_instance.cpp  7 Jun 2007 07:28:23 -0000       1.284
@@ -1981,20 +1981,18 @@
                }
        }
 
-       // Execute any new actions triggered by the tag,
-       // leaving existing actions to be executed.
+       //
+       // exetract target frame actions and execute them
+       //
        ActionList::iterator it = m_action_list.begin();
-       for(size_t i =0; i<original_size; i++)
-       {
-               it++;
-       }
-       ActionList::iterator previous_end = it;
-       while (it != m_action_list.end())
-       {
-               execute_action(*(*it));
-               ++it;
-       }
-       m_action_list.erase(previous_end, m_action_list.end());
+       for(size_t i =0; i<original_size; i++) { it++; }
+       ActionList::iterator original_end = it;
+       
+       ActionList frame_actions(original_end, m_action_list.end());
+       // erase the target frame actions from the orignal list
+       m_action_list.erase(original_end, m_action_list.end());
+       // Note: this function may invalidate the iterators above
+       execute_actions(frame_actions);
 
        assert(m_action_list.size() == original_size);
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]