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 serv...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...
Date: Wed, 19 Sep 2007 23:24:45 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/09/19 23:24:45

Modified files:
        .              : ChangeLog 
        server         : sprite_instance.cpp 
        server/parser  : movie_def_impl.cpp movie_def_impl.h 

Log message:
                * server/sprite_instance.cpp (goto_frame): fix blind jump to 
target
                  frame when > frame count. We still want to ensure_frame_loaded
                  instead.
                * server/parser/movie_def_impl.{cpp,h}: mutex-protect access to 
named
                  frames map.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4354&r2=1.4355
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.347&r2=1.348
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/movie_def_impl.cpp?cvsroot=gnash&r1=1.82&r2=1.83
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/movie_def_impl.h?cvsroot=gnash&r1=1.54&r2=1.55

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4354
retrieving revision 1.4355
diff -u -b -r1.4354 -r1.4355
--- ChangeLog   19 Sep 2007 21:33:38 -0000      1.4354
+++ ChangeLog   19 Sep 2007 23:24:44 -0000      1.4355
@@ -1,5 +1,13 @@
 2007-09-19 Sandro Santilli <address@hidden>
 
+       * server/sprite_instance.cpp (goto_frame): fix blind jump to target
+         frame when > frame count. We still want to ensure_frame_loaded
+         instead. 
+       * server/parser/movie_def_impl.{cpp,h}: mutex-protect access to named
+         frames map.
+
+2007-09-19 Sandro Santilli <address@hidden>
+
        * extensions/mysql/mysql_db.cpp: use init_member, not set_member, when
          initializing symbols (should fix use in SWF6 or lower versions -
          untested but pretty sure).

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.347
retrieving revision 1.348
diff -u -b -r1.347 -r1.348
--- server/sprite_instance.cpp  19 Sep 2007 14:20:49 -0000      1.347
+++ server/sprite_instance.cpp  19 Sep 2007 23:24:44 -0000      1.348
@@ -1848,14 +1848,19 @@
        //GNASH_REPORT_FUNCTION;
 
        as_environment* env = const_cast<as_environment*>(&m_as_environment);
+       std::string fspecStr = frame_spec.to_string(env);
 
-       as_value str(frame_spec.to_string(env));
+       as_value str(fspecStr);
 
        double num =  str.to_number(env);
 
+       //log_debug("get_frame_number(%s), num: %g", 
frame_spec.to_debug_string().c_str(), num);
+
        if ( ! isfinite(num) || int(num) != num )
        {
-               return m_def->get_labeled_frame(frame_spec.to_string(env), 
frameno);
+               bool ret = m_def->get_labeled_frame(fspecStr, frameno);
+               //log_debug("get_labeled_frame(%s) returned %d, frameno is %d", 
fspecStr.c_str(), ret, frameno);
+               return ret;
        }
 
        // TODO: are we sure we shouldn't check for frames labeled with 
negative numbers ?
@@ -2459,14 +2464,14 @@
     // and stop at that frame. 
     set_play_state(STOP);
 
-    if(target_frame_number == m_current_frame)
+    if(target_frame_number > m_def->get_frame_count() - 1)
     {
-        // don't push actions
-        return;
+       // TODO: should we assert this is never the case ?
+        target_frame_number = m_def->get_frame_count() - 1;
     }
-    if(target_frame_number > m_def->get_frame_count() - 1)
+
+    if(target_frame_number == m_current_frame)
     {
-        m_current_frame = m_def->get_frame_count() - 1;
         // don't push actions
         return;
     }
@@ -2496,7 +2501,12 @@
                 loaded_frames);
 
         );
-        m_def->ensure_frame_loaded(target_frame_number+1);
+        if ( ! m_def->ensure_frame_loaded(target_frame_number+1) )
+       {
+               log_error("Target frame of a gotoFrame(%d) was never loaded, 
altought frame count in header (%d) said we would have found it",
+                       target_frame_number+1, m_def->get_frame_count()+1);
+               return; // ... I guess, or not ?
+       }
     }
 
 

Index: server/parser/movie_def_impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/movie_def_impl.cpp,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- server/parser/movie_def_impl.cpp    17 Sep 2007 23:33:18 -0000      1.82
+++ server/parser/movie_def_impl.cpp    19 Sep 2007 23:24:45 -0000      1.83
@@ -1125,17 +1125,17 @@
 void
 movie_def_impl::add_frame_name(const std::string& n)
 {
-       //log_msg(_("labelframe: frame %d, name %s"), _frames_loaded, name);
-       //why do we care about m_frame_count here ?
-       //assert(_frames_loaded < m_frame_count);
-       m_named_frames[n] = _frames_loaded;
+       boost::mutex::scoped_lock lock(_namedFramesMutex);
+       //log_debug(_("labelframe: frame %d, name %s"), _frames_loaded, 
n.c_str());
+       _namedFrames[n] = _frames_loaded;
 }
 
 bool
 movie_def_impl::get_labeled_frame(const std::string& label, size_t& 
frame_number)
 {
-    NamedFrameMap::iterator it = m_named_frames.find(label);
-    if ( it == m_named_frames.end() ) return false;
+    boost::mutex::scoped_lock lock(_namedFramesMutex);
+    NamedFrameMap::iterator it = _namedFrames.find(label);
+    if ( it == _namedFrames.end() ) return false;
     frame_number = it->second;
     return true;
 }

Index: server/parser/movie_def_impl.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/movie_def_impl.h,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- server/parser/movie_def_impl.h      17 Sep 2007 23:33:18 -0000      1.54
+++ server/parser/movie_def_impl.h      19 Sep 2007 23:24:45 -0000      1.55
@@ -220,7 +220,10 @@
 
        /// 0-based frame #'s
        typedef std::map<std::string, size_t> NamedFrameMap;
-       NamedFrameMap m_named_frames;
+       NamedFrameMap _namedFrames;
+
+       // Mutex protecting access to _namedFrames
+       mutable boost::mutex _namedFramesMutex;
 
        typedef std::map<std::string, boost::intrusive_ptr<resource> > 
ExportMap;
        ExportMap m_exports;
@@ -452,6 +455,8 @@
 
        // See dox in movie_definition
        //
+       // locks _namedFramesMutex
+       //
        bool get_labeled_frame(const std::string& label, size_t& frame_number);
 
        void    add_font(int font_id, font* f);
@@ -488,6 +493,9 @@
        void    add_init_action(execute_tag* e, int cid);
 
        // See dox in movie_definition.h
+       //
+       // locks _namedFramesMutex
+       //
        void add_frame_name(const std::string& name);
 
        /// Set an input object for later loading DefineBits




reply via email to

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