[Libreoffice-commits] .: cppu/source

Stephan Bergmann sbergmann at kemper.freedesktop.org
Mon Dec 19 07:09:05 PST 2011


 cppu/source/threadpool/thread.cxx |   25 +++++++++++++++++++++++++
 cppu/source/threadpool/thread.hxx |    2 ++
 2 files changed, 27 insertions(+)

New commits:
commit b68640c44ecdb1df59d704cc6c2bae8bb412d7d0
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Dec 19 15:15:28 2011 +0100

    Prevent creation of new ORequestThreads during shutdown.

diff --git a/cppu/source/threadpool/thread.cxx b/cppu/source/threadpool/thread.cxx
index 58aec56..cc22a45 100644
--- a/cppu/source/threadpool/thread.cxx
+++ b/cppu/source/threadpool/thread.cxx
@@ -30,12 +30,22 @@
 #include <osl/diagnose.h>
 #include <uno/threadpool.h>
 
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/XInterface.hpp>
 #include <rtl/instance.hxx>
+#include <rtl/ustring.h>
+#include <rtl/ustring.hxx>
 
 #include "thread.hxx"
 #include "jobqueue.hxx"
 #include "threadpool.hxx"
 
+namespace {
+
+namespace css = com::sun::star;
+
+}
 
 using namespace osl;
 extern "C" {
@@ -53,6 +63,8 @@ void SAL_CALL cppu_requestThreadWorker( void *pVoid )
 namespace cppu_threadpool {
 
 // ----------------------------------------------------------------------------------
+    ThreadAdmin::ThreadAdmin(): m_disposed(false) {}
+
     ThreadAdmin::~ThreadAdmin()
     {
 #if OSL_DEBUG_LEVEL > 1
@@ -66,6 +78,15 @@ namespace cppu_threadpool {
     void ThreadAdmin::add( ORequestThread *p )
     {
         MutexGuard aGuard( m_mutex );
+        if( m_disposed )
+        {
+            throw css::lang::DisposedException(
+                rtl::OUString(
+                    RTL_CONSTASCII_USTRINGPARAM(
+                        "cppu_threadpool::ORequestThread created after"
+                        " cppu_threadpool::ThreadAdmin has been disposed")),
+                css::uno::Reference< css::uno::XInterface >());
+        }
         m_lst.push_back( p );
     }
 
@@ -79,6 +100,10 @@ namespace cppu_threadpool {
 
     void ThreadAdmin::join()
     {
+        {
+            MutexGuard aGuard( m_mutex );
+            m_disposed = true;
+        }
         ORequestThread *pCurrent;
         do
         {
diff --git a/cppu/source/threadpool/thread.hxx b/cppu/source/threadpool/thread.hxx
index bbef51e..a3ea45a 100644
--- a/cppu/source/threadpool/thread.hxx
+++ b/cppu/source/threadpool/thread.hxx
@@ -74,6 +74,7 @@ namespace cppu_threadpool {
     class ThreadAdmin
     {
     public:
+        ThreadAdmin();
         ~ThreadAdmin ();
         static ThreadAdminHolder &getInstance();
         void add( ORequestThread * );
@@ -83,6 +84,7 @@ namespace cppu_threadpool {
     private:
         ::osl::Mutex m_mutex;
         ::std::list< ORequestThread * > m_lst;
+        bool m_disposed;
     };
 
 } // end cppu_threadpool


More information about the Libreoffice-commits mailing list