summaryrefslogtreecommitdiff
path: root/vcl/inc
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2017-08-15 08:05:51 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2017-09-19 09:25:14 +0200
commit3840aede596e6fc24f7ed7df9100fb028134aac6 (patch)
tree74d1d5efa3b2ad5448181fc185faf226aed192e4 /vcl/inc
parent10b49dfb3996f99dec8dd0d2ffae2aef4022f395 (diff)
Unify SolarMutex implementations
All backends implement the SolarMutex in mostly the same way. So this consolidates this code into a GenericSolarMutex. We still need the abstract SolarMutex class for the fake AKA fascade implementation in dbaccess. The patch also replaces various places of direct mutex usage with either SolarMutexGuard or SolarMutexReleaser objects. Change-Id: Ia0146dd6c51a3b9a513cc6af34a66def58aad831 Reviewed-on: https://gerrit.libreoffice.org/42325 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
Diffstat (limited to 'vcl/inc')
-rw-r--r--vcl/inc/osx/salinst.h30
-rw-r--r--vcl/inc/salinst.hxx6
-rw-r--r--vcl/inc/unx/geninst.h42
-rw-r--r--vcl/inc/win/saldata.hxx4
-rw-r--r--vcl/inc/win/salinst.h5
-rw-r--r--vcl/inc/win/salprn.h3
6 files changed, 22 insertions, 68 deletions
diff --git a/vcl/inc/osx/salinst.h b/vcl/inc/osx/salinst.h
index bd02608d4d45..263b9027b956 100644
--- a/vcl/inc/osx/salinst.h
+++ b/vcl/inc/osx/salinst.h
@@ -37,19 +37,15 @@ class ApplicationEvent;
class Image;
enum class SalEvent;
-class SalYieldMutex : public comphelper::SolarMutex
+class SalYieldMutex : public comphelper::GenericSolarMutex
{
- osl::Mutex m_mutex;
- sal_uLong mnCount;
- oslThreadIdentifier mnThreadId;
+protected:
+ virtual void doAcquire( sal_uInt32 nLockCount ) override;
+ virtual sal_uInt32 doRelease( bool bUnlockAll ) override;
public:
- SalYieldMutex();
- virtual void acquire() override;
- virtual void release() override;
- virtual bool tryToAcquire() override;
- sal_uLong GetAcquireCount() const { return mnCount; }
- oslThreadIdentifier GetThreadId() const { return mnThreadId; }
+ SalYieldMutex();
+ virtual ~SalYieldMutex();
};
class AquaSalInstance : public SalInstance
@@ -105,9 +101,8 @@ public:
virtual SalSystem* CreateSalSystem() override;
virtual SalBitmap* CreateSalBitmap() override;
virtual comphelper::SolarMutex* GetYieldMutex() override;
- virtual sal_uLong ReleaseYieldMutex() override;
- virtual void AcquireYieldMutex( sal_uLong nCount ) override;
- virtual bool CheckYieldMutex() override;
+ virtual sal_uInt32 ReleaseYieldMutex( bool bUnlockAll = false ) override;
+ virtual void AcquireYieldMutex( sal_uInt32 nCount = 1 ) override;
virtual bool DoYield(bool bWait, bool bHandleAllCurrentEvents,
sal_uLong nReleased) override;
virtual bool AnyInput( VclInputFlags nType ) override;
@@ -159,15 +154,6 @@ public:
static NSMenu* GetDynamicDockMenu();
};
-// helper class: inverted solar guard
-class YieldMutexReleaser
-{
- sal_uLong mnCount;
- public:
- YieldMutexReleaser();
- ~YieldMutexReleaser();
-};
-
CGImageRef CreateCGImage( const Image& );
NSImage* CreateNSImage( const Image& );
diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx
index 03491553c62a..12959cc44280 100644
--- a/vcl/inc/salinst.hxx
+++ b/vcl/inc/salinst.hxx
@@ -25,6 +25,7 @@
#include <tools/solar.h>
#include <vcl/dllapi.h>
#include <vcl/salgtype.hxx>
+#include <osl/thread.hxx>
#include "displayconnectiondispatch.hxx"
@@ -121,10 +122,9 @@ public:
// YieldMutex
virtual comphelper::SolarMutex*
GetYieldMutex() = 0;
- virtual sal_uLong ReleaseYieldMutex() = 0;
- virtual void AcquireYieldMutex( sal_uLong nCount ) = 0;
+ virtual sal_uInt32 ReleaseYieldMutex( bool bUnlockAll = false ) = 0;
+ virtual void AcquireYieldMutex( sal_uInt32 nCount = 1 ) = 0;
// return true, if yield mutex is owned by this thread, else false
- virtual bool CheckYieldMutex() = 0;
virtual bool IsMainThread() const = 0;
/**
diff --git a/vcl/inc/unx/geninst.h b/vcl/inc/unx/geninst.h
index 2c99a7b3e0a1..c432dbecabfb 100644
--- a/vcl/inc/unx/geninst.h
+++ b/vcl/inc/unx/geninst.h
@@ -28,42 +28,11 @@
#include <saldatabasic.hxx>
#include "unx/genprn.h"
-class VCL_DLLPUBLIC SalYieldMutexReleaser
+class VCL_DLLPUBLIC SalYieldMutex : public comphelper::GenericSolarMutex
{
- sal_uLong m_nYieldCount;
public:
- inline SalYieldMutexReleaser();
- inline ~SalYieldMutexReleaser();
-};
-
-inline SalYieldMutexReleaser::SalYieldMutexReleaser()
-{
- m_nYieldCount = GetSalData()->m_pInstance->ReleaseYieldMutex();
-}
-
-inline SalYieldMutexReleaser::~SalYieldMutexReleaser()
-{
- GetSalData()->m_pInstance->AcquireYieldMutex( m_nYieldCount );
-}
-
-class VCL_DLLPUBLIC SalYieldMutex : public comphelper::SolarMutex
-{
- osl::Mutex m_mutex;
-
-protected:
- sal_uIntPtr mnCount;
- oslThreadIdentifier mnThreadId;
-
-public:
- SalYieldMutex();
- virtual ~SalYieldMutex() override;
-
- virtual void acquire() override;
- virtual void release() override;
- virtual bool tryToAcquire() override;
-
- sal_uIntPtr GetAcquireCount() const { return mnCount; }
- oslThreadIdentifier GetThreadId() const { return mnThreadId; }
+ SalYieldMutex();
+ virtual ~SalYieldMutex() override;
};
/*
@@ -84,9 +53,8 @@ public:
// Yield mutex
virtual comphelper::SolarMutex* GetYieldMutex() override;
- virtual sal_uIntPtr ReleaseYieldMutex() override;
- virtual void AcquireYieldMutex( sal_uIntPtr nCount ) override;
- virtual bool CheckYieldMutex() override;
+ virtual sal_uInt32 ReleaseYieldMutex( bool bUnlockAll = false ) override;
+ virtual void AcquireYieldMutex( sal_uInt32 nCount = 1 ) override;
// Printing
virtual SalInfoPrinter* CreateInfoPrinter ( SalPrinterQueueInfo* pQueueInfo,
diff --git a/vcl/inc/win/saldata.hxx b/vcl/inc/win/saldata.hxx
index 4d8361d57325..bc5b9c5db1eb 100644
--- a/vcl/inc/win/saldata.hxx
+++ b/vcl/inc/win/saldata.hxx
@@ -172,11 +172,9 @@ bool ImplLoadSalIcon( int nId, HICON& rIcon, HICON& rSmallIcon );
void ImplInitSalGDI();
void ImplFreeSalGDI();
-void ImplSalYieldMutexAcquireWithWait( sal_uLong nCount = 1 );
+void ImplSalYieldMutexAcquireWithWait( sal_uInt32 nCount = 1 );
bool ImplSalYieldMutexTryToAcquire();
void ImplSalYieldMutexRelease();
-sal_uLong ImplSalReleaseYieldMutex();
-void ImplSalAcquireYieldMutex( sal_uLong nCount );
LRESULT CALLBACK SalFrameWndProcW( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam );
diff --git a/vcl/inc/win/salinst.h b/vcl/inc/win/salinst.h
index 03ba573c523b..6efecbd6bd5e 100644
--- a/vcl/inc/win/salinst.h
+++ b/vcl/inc/win/salinst.h
@@ -59,9 +59,8 @@ public:
virtual SalSystem* CreateSalSystem() override;
virtual SalBitmap* CreateSalBitmap() override;
virtual comphelper::SolarMutex* GetYieldMutex() override;
- virtual sal_uIntPtr ReleaseYieldMutex() override;
- virtual void AcquireYieldMutex( sal_uIntPtr nCount ) override;
- virtual bool CheckYieldMutex() override;
+ virtual sal_uInt32 ReleaseYieldMutex( bool bUnlockAll = false ) override;
+ virtual void AcquireYieldMutex( sal_uInt32 nCount = 1 ) override;
virtual bool IsMainThread() const override;
virtual bool DoYield(bool bWait, bool bHandleAllCurrentEvents, sal_uLong nReleased) override;
diff --git a/vcl/inc/win/salprn.h b/vcl/inc/win/salprn.h
index a483e2502cc7..ed6005283661 100644
--- a/vcl/inc/win/salprn.h
+++ b/vcl/inc/win/salprn.h
@@ -84,6 +84,9 @@ public:
bool mbValid;
+protected:
+ void DoEndDoc(HDC hDC);
+
public:
WinSalPrinter();
virtual ~WinSalPrinter() override;