[Top][All Lists]
[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
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/04
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/07
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/13
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/17
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/18
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...,
Sandro Santilli <=
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/24