summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2018-02-27 19:55:39 -0400
committerHenry Castro <hcastro@collabora.com>2018-02-28 22:47:52 +0100
commite215310d6b531b8af39c86639ef88495470681bc (patch)
treed7eb75d0f1275529845861ba735e40c1f2f72d5d
parentf2a4cea6c035e9a837942934068b5f80a996580a (diff)
lok: update main thread
In the pre-initialization phase of the tiled rendering case the SvpSalInstance is created in a different process and when a new process is created (fork), the main thread identifier does not match so it is required to update it. Change-Id: I189e53f0b46c60f34a8016222079c9b1e2b3fef8 Reviewed-on: https://gerrit.libreoffice.org/50477 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Henry Castro <hcastro@collabora.com>
-rw-r--r--desktop/source/lib/init.cxx2
-rw-r--r--include/vcl/svapp.hxx3
-rw-r--r--vcl/headless/svpinst.cxx6
-rw-r--r--vcl/inc/headless/svpinst.hxx1
-rw-r--r--vcl/inc/salinst.hxx2
-rw-r--r--vcl/source/app/svapp.cxx7
6 files changed, 21 insertions, 0 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 143ec46fdc63..d0978b449937 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -3582,6 +3582,8 @@ static void lo_startmain(void*)
if (comphelper::SolarMutex::get())
Application::GetSolarMutex().tryToAcquire();
+ Application::UpdateMainThread();
+
soffice_main();
Application::ReleaseSolarMutex();
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 29b8f2c258b3..d9daba3154a8 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -1352,6 +1352,9 @@ public:
static void ShowNativeErrorBox(const OUString& sTitle ,
const OUString& sMessage);
+ /** Update main thread identifier */
+ static void UpdateMainThread();
+
/** Do we have a native / system file selector available?
@returns True if native file selector is available, false otherwise.
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index 61fc93883f6a..412e86c55351 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -385,6 +385,12 @@ bool SvpSalInstance::IsMainThread() const
return osl::Thread::getCurrentIdentifier() == m_MainThread;
}
+void SvpSalInstance::updateMainThread()
+{
+ if (!IsMainThread())
+ m_MainThread = osl::Thread::getCurrentIdentifier();
+}
+
bool SvpSalInstance::DoYield(bool bWait, bool bHandleAllCurrentEvents)
{
#ifndef NDEBUG
diff --git a/vcl/inc/headless/svpinst.hxx b/vcl/inc/headless/svpinst.hxx
index 6027b2b4d683..1dd577b78fb1 100644
--- a/vcl/inc/headless/svpinst.hxx
+++ b/vcl/inc/headless/svpinst.hxx
@@ -171,6 +171,7 @@ public:
virtual bool DoYield(bool bWait, bool bHandleAllCurrentEvents) override;
virtual bool AnyInput( VclInputFlags nType ) override;
virtual bool IsMainThread() const override;
+ virtual void updateMainThread() override;
// may return NULL to disable session management
virtual SalSession* CreateSalSession() override;
diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx
index 600f8ddfb8b3..8b7a77f34543 100644
--- a/vcl/inc/salinst.hxx
+++ b/vcl/inc/salinst.hxx
@@ -186,6 +186,8 @@ public:
virtual void jobStartedPrinterUpdate() {}
virtual void jobEndedPrinterUpdate() {}
+ virtual void updateMainThread() {}
+
/// get information about underlying versions
virtual OUString getOSVersion() { return OUString("-"); }
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index 3276eed372d5..4543b6835fb7 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -1313,6 +1313,13 @@ void Application::SetHelp( Help* pHelp )
ImplGetSVData()->maAppData.mpHelp = pHelp;
}
+void Application::UpdateMainThread()
+{
+ ImplSVData* pSVData = ImplGetSVData();
+ if (pSVData && pSVData->mpDefInst)
+ pSVData->mpDefInst->updateMainThread();
+}
+
Help* Application::GetHelp()
{
return ImplGetSVData()->maAppData.mpHelp;