CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/08/03 21:56:59
Modified files: . : ChangeLog server/asobj : Stage.cpp Stage.h Log message: * server/asobj/Stage.{cpp,h}: Mark all listeners as reachable, drop the unused dropDanglingListeners (since it's verified the Stage doesn't store *weak* pointers). CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3942&r2=1.3943 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.cpp?cvsroot=gnash&r1=1.17&r2=1.18 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.h?cvsroot=gnash&r1=1.9&r2=1.10 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.3942 retrieving revision 1.3943 diff -u -b -r1.3942 -r1.3943 --- ChangeLog 3 Aug 2007 21:44:31 -0000 1.3942 +++ ChangeLog 3 Aug 2007 21:56:58 -0000 1.3943 @@ -1,5 +1,11 @@ 2007-08-03 Sandro Santilli <[EMAIL PROTECTED]> + * server/asobj/Stage.{cpp,h}: Mark all listeners as reachable, + drop the unused dropDanglingListeners (since it's verified + the Stage doesn't store *weak* pointers). + +2007-08-03 Sandro Santilli <[EMAIL PROTECTED]> + * server/movie_root.cpp (getStage): properly convert case when fetching the "Stage" object from SWF6 or lower. * server/asobj/Stage.cpp (onResize): properly convert case Index: server/asobj/Stage.cpp =================================================================== RCS file: /sources/gnash/gnash/server/asobj/Stage.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -b -r1.17 -r1.18 --- server/asobj/Stage.cpp 3 Aug 2007 21:44:32 -0000 1.17 +++ server/asobj/Stage.cpp 3 Aug 2007 21:56:59 -0000 1.18 @@ -137,25 +137,6 @@ _listeners.remove(obj); } -/// Remove listeners with a refcount == 1 -// -/// This function should be called before marking -/// objects to keep alive (when GC gets in effect) -/// -void -Stage::dropDanglingListeners() -{ - // TODO: find a way to find dangling listeners -#ifndef GNASH_USE_GC - for (ListenersList::iterator it=_listeners.begin(), - itEnd=_listeners.end(); - it != itEnd; ++it) - { - if ( (*it)->get_ref_count() == 1 ) it=_listeners.erase(it); - } -#endif -} - const char* Stage::getScaleModeString() { @@ -302,4 +283,18 @@ global.init_member("Stage", obj.get()); } +#ifdef GNASH_USE_GC +void +Stage::markReachableResources() const +{ + for (ListenersList::const_iterator i=_listeners.begin(), e=_listeners.end(); i!=e; ++i) + { + (*i)->setReachable(); + } + + // Invoke generic as_object marker + markAsObjectReachable(); +} +#endif // def GNASH_USE_GC + } // end of gnash namespace Index: server/asobj/Stage.h =================================================================== RCS file: /sources/gnash/gnash/server/asobj/Stage.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -b -r1.9 -r1.10 --- server/asobj/Stage.h 1 Jul 2007 10:54:31 -0000 1.9 +++ server/asobj/Stage.h 3 Aug 2007 21:56:59 -0000 1.10 @@ -86,6 +86,13 @@ /// const char* getScaleModeString(); +protected: + +#ifdef GNASH_USE_GC + /// Mark all Stage listeners as reachable + void markReachableResources() const; +#endif + private: /// Notify all listeners about a resize event @@ -99,13 +106,6 @@ /// Notify an object about an resize event void notifyResize(boost::intrusive_ptr<as_object> obj, as_environment* env); - /// Remove listeners with a refcount == 1 - // - /// This function should be called before marking - /// objects to keep alive (when GC gets in effect) - /// - void dropDanglingListeners(); - typedef std::list<boost::intrusive_ptr<as_object> > ListenersList; ListenersList _listeners; _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit