cppu/source/threadpool/thread.cxx | 25 +++++++++++++++++++++++++ cppu/source/threadpool/thread.hxx | 2 ++ 2 files changed, 27 insertions(+)
New commits: commit b68640c44ecdb1df59d704cc6c2bae8bb412d7d0 Author: Stephan Bergmann <sberg...@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 _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits