gnash-commit
[Top][All Lists]
Advanced

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

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


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/LoadVariablesThread.cpp ...
Date: Tue, 15 Jan 2008 10:26:40 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/01/15 10:26:40

Modified files:
        .              : ChangeLog 
        server         : LoadVariablesThread.cpp LoadVariablesThread.h 

Log message:
        implement download canceling and proper destructor (cancels&joins).
        Fixes segfault reported in bug #21675 (comment #6).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5397&r2=1.5398
http://cvs.savannah.gnu.org/viewcvs/gnash/server/LoadVariablesThread.cpp?cvsroot=gnash&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnash/server/LoadVariablesThread.h?cvsroot=gnash&r1=1.3&r2=1.4

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5397
retrieving revision 1.5398
diff -u -b -r1.5397 -r1.5398
--- ChangeLog   15 Jan 2008 09:35:10 -0000      1.5397
+++ ChangeLog   15 Jan 2008 10:26:40 -0000      1.5398
@@ -1,5 +1,11 @@
 2008-01-15 Sandro Santilli <address@hidden>
 
+       * server/LoadVariablesThread.{cpp,h}: implement download canceling
+         and proper destructor (cancels&joins). Fixes segfault reported
+         in bug #21675 (comment #6).
+
+2008-01-15 Sandro Santilli <address@hidden>
+
        * testsuite/swfdec/PASSING: shift-{5,6,7}.swf succeed
        * server/vm/ASHandlers.cpp: fix ActionShift* opcodes.
        * testsuite/actionscript.all/ops.as: add tests for ActionShiftRight2

Index: server/LoadVariablesThread.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/LoadVariablesThread.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- server/LoadVariablesThread.cpp      11 Jan 2008 16:50:36 -0000      1.6
+++ server/LoadVariablesThread.cpp      15 Jan 2008 10:26:40 -0000      1.7
@@ -75,6 +75,12 @@
 
                // eof, get out !
                if ( _stream->get_eof() ) break;
+
+               if ( cancelRequested() )
+               {
+                       log_debug("Cancelling LoadVariables download 
thread...");
+                       break;
+               }
        }
 
        if ( ! toparse.empty() )
@@ -99,7 +105,8 @@
 LoadVariablesThread::LoadVariablesThread(const URL& url, const std::string& 
postdata)
        :
        _stream(StreamProvider::getDefaultInstance().getStream(url, postdata)),
-       _completed(false)
+       _completed(false),
+       _canceled(false)
 {
        if ( ! _stream.get() )
        {
@@ -110,7 +117,8 @@
 LoadVariablesThread::LoadVariablesThread(const URL& url)
        :
        _stream(StreamProvider::getDefaultInstance().getStream(url)),
-       _completed(false)
+       _completed(false),
+       _canceled(false)
 {
        if ( ! _stream.get() )
        {
@@ -118,4 +126,29 @@
        }
 }
 
+void
+LoadVariablesThread::cancel()
+{
+       boost::mutex::scoped_lock lock(_mutex);
+       _canceled = true;
+}
+
+bool
+LoadVariablesThread::cancelRequested()
+{
+       boost::mutex::scoped_lock lock(_mutex);
+       return _canceled;
+}
+
+LoadVariablesThread::~LoadVariablesThread()
+{
+       if ( _thread.get() )
+       {
+               cancel();
+               _thread->join();
+               _thread.reset();
+       }
+}
+
+
 } // namespace gnash 

Index: server/LoadVariablesThread.h
===================================================================
RCS file: /sources/gnash/gnash/server/LoadVariablesThread.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- server/LoadVariablesThread.h        10 Oct 2007 17:49:45 -0000      1.3
+++ server/LoadVariablesThread.h        15 Jan 2008 10:26:40 -0000      1.4
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: LoadVariablesThread.h,v 1.3 2007/10/10 17:49:45 strk Exp $ */
+/* $Id: LoadVariablesThread.h,v 1.4 2008/01/15 10:26:40 strk Exp $ */
 
 #ifndef GNASH_LOADVARIABLESTHREAD_H
 #define GNASH_LOADVARIABLESTHREAD_H
@@ -80,6 +80,9 @@
        ///
        LoadVariablesThread(const URL& url, const std::string& postdata);
 
+       /// Destroy the LoadVariablesThread, joining the thread if spawned
+       ~LoadVariablesThread();
+
        /// Return the name,value map parsed out of the loaded stream
        ValuesMap& getValues()
        {
@@ -94,6 +97,12 @@
                _thread.reset( new 
boost::thread(boost::bind(LoadVariablesThread::execLoadingThread, this)) );
        }
 
+       /// Cancel a download in progress
+       //
+       /// Locks _mutex
+       ///
+       void cancel();
+
        /// Return true if loading/parsing is in progress
        bool inProgress()
        {
@@ -181,6 +190,12 @@
                return _vals.size();
        }
 
+       /// Check if download cancel was requested
+       //
+       /// Locks _mutex
+       ///
+       bool cancelRequested();
+
        size_t _bytesLoaded;
 
        size_t _bytesTotal;
@@ -193,6 +208,8 @@
 
        bool _completed;
 
+       bool _canceled;
+
        boost::mutex _mutex;
 };
 




reply via email to

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