Use an osl::Mutex directly
Change-Id: Icb655df89fcb3c9dac0f25d0fdb5383d24914877
This commit is contained in:
parent
ed15977626
commit
4f843f2bc8
@ -27,7 +27,6 @@
|
||||
|
||||
// include files of own module
|
||||
#include <helper/wakeupthread.hxx>
|
||||
#include <threadhelp/threadhelpbase.hxx>
|
||||
#include <macros/xinterface.hxx>
|
||||
#include <macros/xtypeprovider.hxx>
|
||||
#include <macros/xserviceinfo.hxx>
|
||||
@ -151,8 +150,7 @@ typedef ::std::vector< IndicatorInfo > IndicatorStack;
|
||||
@devstatus ready to use
|
||||
@threadsafe yes
|
||||
*/
|
||||
class StatusIndicatorFactory : private ThreadHelpBase
|
||||
, public ::cppu::WeakImplHelper4<
|
||||
class StatusIndicatorFactory : public ::cppu::WeakImplHelper4<
|
||||
css::lang::XServiceInfo
|
||||
, css::lang::XInitialization
|
||||
, css::task::XStatusIndicatorFactory
|
||||
@ -161,6 +159,7 @@ class StatusIndicatorFactory : private ThreadHelpBase
|
||||
|
||||
// member
|
||||
private:
|
||||
osl::Mutex m_mutex;
|
||||
|
||||
/** stack with all current indicator children. */
|
||||
IndicatorStack m_aStack;
|
||||
|
@ -55,8 +55,7 @@ const char PROGRESS_RESOURCE[] = "private:resource/progressbar/progressbar";
|
||||
|
||||
|
||||
StatusIndicatorFactory::StatusIndicatorFactory(const css::uno::Reference< css::uno::XComponentContext >& xContext)
|
||||
: ThreadHelpBase ( )
|
||||
, m_xContext (xContext )
|
||||
: m_xContext (xContext )
|
||||
, m_pWakeUp (0 )
|
||||
, m_bAllowReschedule (sal_False)
|
||||
, m_bAllowParentShow (sal_False)
|
||||
@ -76,8 +75,7 @@ void SAL_CALL StatusIndicatorFactory::initialize(const css::uno::Sequence< css::
|
||||
css::uno::RuntimeException, std::exception)
|
||||
{
|
||||
if (lArguments.getLength() > 0) {
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
|
||||
css::uno::Reference< css::frame::XFrame > xTmpFrame;
|
||||
css::uno::Reference< css::awt::XWindow > xTmpWindow;
|
||||
@ -101,9 +99,6 @@ void SAL_CALL StatusIndicatorFactory::initialize(const css::uno::Sequence< css::
|
||||
m_xPluggWindow = lArgs.getUnpackedValueOrDefault("Window" , css::uno::Reference< css::awt::XWindow >() );
|
||||
m_bAllowParentShow = lArgs.getUnpackedValueOrDefault("AllowParentShow" , (sal_Bool)sal_False );
|
||||
m_bDisableReschedule = lArgs.getUnpackedValueOrDefault("DisableReschedule", (sal_Bool)sal_False );
|
||||
|
||||
aWriteLock.unlock();
|
||||
// <- SAFE ----------------------------------
|
||||
}
|
||||
}
|
||||
|
||||
@ -124,11 +119,8 @@ css::uno::Reference< css::task::XStatusIndicator > SAL_CALL StatusIndicatorFacto
|
||||
void SAL_CALL StatusIndicatorFactory::update()
|
||||
throw(css::uno::RuntimeException, std::exception)
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
m_bAllowReschedule = sal_True;
|
||||
aWriteLock.unlock();
|
||||
// <- SAFE ----------------------------------
|
||||
}
|
||||
|
||||
|
||||
@ -137,7 +129,7 @@ void StatusIndicatorFactory::start(const css::uno::Reference< css::task::XStatus
|
||||
sal_Int32 nRange)
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::ClearableMutexGuard aWriteLock(m_mutex);
|
||||
|
||||
// create new info structure for this child or move it to the front of our stack
|
||||
IndicatorStack::iterator pItem = ::std::find(m_aStack.begin(), m_aStack.end(), xChild);
|
||||
@ -149,7 +141,7 @@ void StatusIndicatorFactory::start(const css::uno::Reference< css::task::XStatus
|
||||
m_xActiveChild = xChild;
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress = m_xProgress;
|
||||
|
||||
aWriteLock.unlock();
|
||||
aWriteLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
implts_makeParentVisibleIfAllowed();
|
||||
@ -165,7 +157,7 @@ void StatusIndicatorFactory::start(const css::uno::Reference< css::task::XStatus
|
||||
void StatusIndicatorFactory::reset(const css::uno::Reference< css::task::XStatusIndicator >& xChild)
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
|
||||
// reset the internal info structure related to this child
|
||||
IndicatorStack::iterator pItem = ::std::find(m_aStack.begin(), m_aStack.end(), xChild);
|
||||
@ -178,7 +170,7 @@ void StatusIndicatorFactory::reset(const css::uno::Reference< css::task::XStatus
|
||||
css::uno::Reference< css::task::XStatusIndicator > xActive = m_xActiveChild;
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress = m_xProgress;
|
||||
|
||||
aReadLock.unlock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
// not the top most child => dont change UI
|
||||
@ -196,7 +188,7 @@ void StatusIndicatorFactory::reset(const css::uno::Reference< css::task::XStatus
|
||||
void StatusIndicatorFactory::end(const css::uno::Reference< css::task::XStatusIndicator >& xChild)
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::ClearableMutexGuard aWriteLock(m_mutex);
|
||||
|
||||
// remove this child from our stack
|
||||
IndicatorStack::iterator pItem = ::std::find(m_aStack.begin(), m_aStack.end(), xChild);
|
||||
@ -218,7 +210,7 @@ void StatusIndicatorFactory::end(const css::uno::Reference< css::task::XStatusIn
|
||||
css::uno::Reference< css::task::XStatusIndicator > xActive = m_xActiveChild;
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress = m_xProgress;
|
||||
|
||||
aWriteLock.unlock();
|
||||
aWriteLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
if (xActive.is())
|
||||
@ -251,7 +243,7 @@ void StatusIndicatorFactory::setText(const css::uno::Reference< css::task::XStat
|
||||
const OUString& sText )
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::ClearableMutexGuard aWriteLock(m_mutex);
|
||||
|
||||
IndicatorStack::iterator pItem = ::std::find(m_aStack.begin(), m_aStack.end(), xChild);
|
||||
if (pItem != m_aStack.end())
|
||||
@ -260,7 +252,7 @@ void StatusIndicatorFactory::setText(const css::uno::Reference< css::task::XStat
|
||||
css::uno::Reference< css::task::XStatusIndicator > xActive = m_xActiveChild;
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress = m_xProgress;
|
||||
|
||||
aWriteLock.unlock();
|
||||
aWriteLock.clear();
|
||||
// SAFE -> ----------------------------------
|
||||
|
||||
// paint only the top most indicator
|
||||
@ -281,7 +273,7 @@ void StatusIndicatorFactory::setValue( const css::uno::Reference< css::task::XSt
|
||||
sal_Int32 nValue )
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::ClearableMutexGuard aWriteLock(m_mutex);
|
||||
|
||||
sal_Int32 nOldValue = 0;
|
||||
IndicatorStack::iterator pItem = ::std::find(m_aStack.begin(), m_aStack.end(), xChild);
|
||||
@ -294,7 +286,7 @@ void StatusIndicatorFactory::setValue( const css::uno::Reference< css::task::XSt
|
||||
css::uno::Reference< css::task::XStatusIndicator > xActive = m_xActiveChild;
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress = m_xProgress;
|
||||
|
||||
aWriteLock.unlock();
|
||||
aWriteLock.clear();
|
||||
// SAFE -> ----------------------------------
|
||||
|
||||
if (
|
||||
@ -313,7 +305,7 @@ void StatusIndicatorFactory::setValue( const css::uno::Reference< css::task::XSt
|
||||
void StatusIndicatorFactory::implts_makeParentVisibleIfAllowed()
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
|
||||
if (!m_bAllowParentShow)
|
||||
return;
|
||||
@ -322,7 +314,7 @@ void StatusIndicatorFactory::implts_makeParentVisibleIfAllowed()
|
||||
css::uno::Reference< css::awt::XWindow > xPluggWindow(m_xPluggWindow.get(), css::uno::UNO_QUERY);
|
||||
css::uno::Reference< css::uno::XComponentContext > xContext( m_xContext);
|
||||
|
||||
aReadLock.unlock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
css::uno::Reference< css::awt::XWindow > xParentWindow;
|
||||
@ -406,12 +398,12 @@ void StatusIndicatorFactory::implts_makeParentVisibleIfAllowed()
|
||||
void StatusIndicatorFactory::impl_createProgress()
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
|
||||
css::uno::Reference< css::frame::XFrame > xFrame (m_xFrame.get() , css::uno::UNO_QUERY);
|
||||
css::uno::Reference< css::awt::XWindow > xWindow(m_xPluggWindow.get(), css::uno::UNO_QUERY);
|
||||
|
||||
aReadLock.lock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress;
|
||||
@ -445,23 +437,20 @@ void StatusIndicatorFactory::impl_createProgress()
|
||||
}
|
||||
}
|
||||
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
m_xProgress = xProgress;
|
||||
aWriteLock.lock();
|
||||
// <- SAFE ----------------------------------
|
||||
}
|
||||
|
||||
|
||||
void StatusIndicatorFactory::impl_showProgress()
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
|
||||
css::uno::Reference< css::frame::XFrame > xFrame (m_xFrame.get() , css::uno::UNO_QUERY);
|
||||
css::uno::Reference< css::awt::XWindow > xWindow(m_xPluggWindow.get(), css::uno::UNO_QUERY);
|
||||
|
||||
aReadLock.lock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
css::uno::Reference< css::task::XStatusIndicator > xProgress;
|
||||
@ -489,11 +478,8 @@ void StatusIndicatorFactory::impl_showProgress()
|
||||
}
|
||||
}
|
||||
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
m_xProgress = xProgress;
|
||||
aWriteLock.lock();
|
||||
// <- SAFE ----------------------------------
|
||||
}
|
||||
}
|
||||
|
||||
@ -501,12 +487,12 @@ void StatusIndicatorFactory::impl_showProgress()
|
||||
void StatusIndicatorFactory::impl_hideProgress()
|
||||
{
|
||||
// SAFE -> ----------------------------------
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
|
||||
css::uno::Reference< css::frame::XFrame > xFrame (m_xFrame.get() , css::uno::UNO_QUERY);
|
||||
css::uno::Reference< css::awt::XWindow > xWindow(m_xPluggWindow.get(), css::uno::UNO_QUERY);
|
||||
|
||||
aReadLock.lock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE ----------------------------------
|
||||
|
||||
if (xFrame.is())
|
||||
@ -527,21 +513,18 @@ void StatusIndicatorFactory::impl_hideProgress()
|
||||
void StatusIndicatorFactory::impl_reschedule(sal_Bool bForce)
|
||||
{
|
||||
// SAFE ->
|
||||
Guard aReadLock(m_aLock);
|
||||
osl::ClearableMutexGuard aReadLock(m_mutex);
|
||||
if (m_bDisableReschedule)
|
||||
return;
|
||||
aReadLock.unlock();
|
||||
aReadLock.clear();
|
||||
// <- SAFE
|
||||
|
||||
sal_Bool bReschedule = bForce;
|
||||
if (!bReschedule)
|
||||
{
|
||||
// SAFE ->
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
bReschedule = m_bAllowReschedule;
|
||||
m_bAllowReschedule = sal_False;
|
||||
aWriteLock.unlock();
|
||||
// <- SAFE
|
||||
}
|
||||
|
||||
if (!bReschedule)
|
||||
@ -570,8 +553,7 @@ void StatusIndicatorFactory::impl_reschedule(sal_Bool bForce)
|
||||
|
||||
void StatusIndicatorFactory::impl_startWakeUpThread()
|
||||
{
|
||||
// SAFE ->
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
|
||||
if (m_bDisableReschedule)
|
||||
return;
|
||||
@ -581,23 +563,18 @@ void StatusIndicatorFactory::impl_startWakeUpThread()
|
||||
m_pWakeUp = new WakeUpThread(this);
|
||||
m_pWakeUp->create();
|
||||
}
|
||||
aWriteLock.unlock();
|
||||
// <- SAFE
|
||||
}
|
||||
|
||||
|
||||
void StatusIndicatorFactory::impl_stopWakeUpThread()
|
||||
{
|
||||
// SAFE ->
|
||||
Guard aWriteLock(m_aLock);
|
||||
osl::MutexGuard g(m_mutex);
|
||||
if (m_pWakeUp)
|
||||
{
|
||||
// Thread kill itself after terminate()!
|
||||
m_pWakeUp->terminate();
|
||||
m_pWakeUp = 0;
|
||||
}
|
||||
aWriteLock.unlock();
|
||||
// <- SAFE
|
||||
}
|
||||
|
||||
} // namespace framework
|
||||
|
Loading…
x
Reference in New Issue
Block a user