Kaydet (Commit) b68640c4 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Prevent creation of new ORequestThreads during shutdown.

üst 71b63586
......@@ -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
{
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment