diff options
Diffstat (limited to 'desktop/source/lib/init.cxx')
-rw-r--r-- | desktop/source/lib/init.cxx | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 0fd3e62a571c..3b97df3faa1c 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -2581,6 +2581,8 @@ lo_startURP(LibreOfficeKit* pThis, void* pReceiveURPFromLOContext, void* pSendUR static void lo_stopURP(LibreOfficeKit* pThis, void* pSendURPToLOContext); +static int lo_joinThreads(LibreOfficeKit* pThis); + static void lo_runLoop(LibreOfficeKit* pThis, LibreOfficeKitPollCallback pPollCallback, LibreOfficeKitWakeCallback pWakeCallback, @@ -2625,6 +2627,7 @@ LibLibreOffice_Impl::LibLibreOffice_Impl() m_pOfficeClass->trimMemory = lo_trimMemory; m_pOfficeClass->startURP = lo_startURP; m_pOfficeClass->stopURP = lo_stopURP; + m_pOfficeClass->joinThreads = lo_joinThreads; gOfficeClass = m_pOfficeClass; } @@ -3357,6 +3360,26 @@ static void lo_stopURP(LibreOfficeKit* /* pThis */, static_cast<FunctionBasedURPConnection*>(pFunctionBasedURPConnection)->close(); } + +static int lo_joinThreads(LibreOfficeKit* /* pThis */) +{ + comphelper::ThreadPool &pool = comphelper::ThreadPool::getSharedOptimalPool(); + pool.joinThreadsIfIdle(); + +// if (comphelper::getWorkerCount() > 0) +// return 0; + + // Grammar checker thread + css::uno::Reference<css::linguistic2::XLinguServiceManager2> xLangSrv = + css::linguistic2::LinguServiceManager::create(xContext); + + auto joinable = dynamic_cast<comphelper::LibreOfficeKit::ThreadJoinable *>(xLangSrv.get()); + if (joinable && !joinable->joinThreads()) + return 0; + + return 1; +} + static void lo_registerCallback (LibreOfficeKit* pThis, LibreOfficeKitCallback pCallback, void* pData) |