From 3902bb7a45f6266c51e01eddcda4e25b34814957 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 13 Mar 2017 09:17:21 +0100 Subject: Revert "comphelper: fix MSVC hang in ThreadPool::shutdown()" As it causes "unopkg.bin: /home/tdf/lode/jenkins/workspace/lo_gerrit/Config/linux_clang_dbgutil_64/comphelper/source/misc/threadpool.cxx:96: comphelper::ThreadPool::~ThreadPool(): Assertion `mbTerminate' failed." in and also locally. Revert till it's clear if that assert() should be a SAL_WARN() or unopkg has to be fixed. This reverts commit 9899ffd244dd367ba69dffe1f21f4f0222064a46. Change-Id: I72902f7da410012340aa8231d84c6871a3f7b976 --- comphelper/source/misc/threadpool.cxx | 8 +------- package/qa/cppunit/test_package.cxx | 14 +++----------- pyuno/source/module/pyuno_module.cxx | 21 +++++---------------- test/source/bootstrapfixture.cxx | 7 ------- test/source/vclbootstrapprotector.cxx | 3 --- unotest/source/python/org/libreoffice/unotest.py | 3 --- 6 files changed, 9 insertions(+), 47 deletions(-) diff --git a/comphelper/source/misc/threadpool.cxx b/comphelper/source/misc/threadpool.cxx index 1219ef24b986..712009d8a2b4 100644 --- a/comphelper/source/misc/threadpool.cxx +++ b/comphelper/source/misc/threadpool.cxx @@ -89,12 +89,7 @@ ThreadPool::ThreadPool( sal_Int32 nWorkers ) : ThreadPool::~ThreadPool() { - // note: calling shutdown from global variable dtor blocks forever on Win7 - // note2: there isn't enough MSVCRT left on exit to call assert() properly - // so these asserts just print something to stderr but exit status is - // still 0, but hopefully they will be more helpful on non-WNT platforms - assert(mbTerminate); - assert(maTasks.empty()); + shutdown(); } struct ThreadPoolStatic : public rtl::StaticWithInit< std::shared_ptr< ThreadPool >, @@ -132,7 +127,6 @@ sal_Int32 ThreadPool::getPreferredConcurrency() return ThreadCount; } -// FIXME: what does "this" refer to in the following? // FIXME: there should be no need for this as/when our baseline // is >VS2015 and drop WinXP; the sorry details are here: // https://connect.microsoft.com/VisualStudio/feedback/details/1282596 diff --git a/package/qa/cppunit/test_package.cxx b/package/qa/cppunit/test_package.cxx index d015e8db8d66..335f490ddaba 100644 --- a/package/qa/cppunit/test_package.cxx +++ b/package/qa/cppunit/test_package.cxx @@ -119,16 +119,8 @@ namespace uno::Reference xNA(xZip, uno::UNO_QUERY); CPPUNIT_ASSERT(xNA.is()); - struct TestThreadPool { - comphelper::ThreadPool aPool; - TestThreadPool(sal_Int32 const i) : aPool(i) {} - ~TestThreadPool() { aPool.shutdown(); } - }; - - { - TestThreadPool aPool(4); - comphelper::ThreadPool & rPool(aPool.aPool); + comphelper::ThreadPool aPool(4); std::shared_ptr pTag = comphelper::ThreadPool::createThreadTaskTag(); std::vector> aTestBuffers(26); @@ -143,10 +135,10 @@ namespace xNA->getByName(aName) >>= xStrm; CPPUNIT_ASSERT(xStrm.is()); - rPool.pushTask(new Worker(pTag, xStrm, *itBuf)); + aPool.pushTask(new Worker(pTag, xStrm, *itBuf)); } - rPool.waitUntilDone(pTag); + aPool.waitUntilDone(pTag); // Verify the streams. CPPUNIT_ASSERT_EQUAL(size_t(26), aTestBuffers.size()); diff --git a/pyuno/source/module/pyuno_module.cxx b/pyuno/source/module/pyuno_module.cxx index 93a58111f6ae..40ed69e0191b 100644 --- a/pyuno/source/module/pyuno_module.cxx +++ b/pyuno/source/module/pyuno_module.cxx @@ -318,7 +318,7 @@ static PyObject* getComponentContext( } static PyObject* initTestEnvironment( - SAL_UNUSED_PARAMETER PyObject*, SAL_UNUSED_PARAMETER PyObject* args) + SAL_UNUSED_PARAMETER PyObject*, SAL_UNUSED_PARAMETER PyObject*) { // this tries to bootstrap enough of the soffice from python to run // unit tests, which is only possible indirectly because pyuno is URE @@ -349,21 +349,10 @@ static PyObject* initTestEnvironment( mod.load(OStringToOUString(libname, osl_getThreadTextEncoding()), SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL); if (!mod.is()) { abort(); } - assert(PyTuple_Check(args)); - if (PyTuple_Size(args) == 0) - { - oslGenericFunction const pFunc( - mod.getFunctionSymbol("test_init")); - if (!pFunc) { abort(); } - reinterpret_cast(pFunc)(xMSF.get()); - } - else - { - oslGenericFunction const pFunc( - mod.getFunctionSymbol("test_fini")); - if (!pFunc) { abort(); } - reinterpret_cast(pFunc)(); - } + oslGenericFunction const pFunc( + mod.getFunctionSymbol("test_init")); + if (!pFunc) { abort(); } + reinterpret_cast(pFunc)(xMSF.get()); } catch (const css::uno::Exception &) { diff --git a/test/source/bootstrapfixture.cxx b/test/source/bootstrapfixture.cxx index 5fa01a388c50..c97c0ceed535 100644 --- a/test/source/bootstrapfixture.cxx +++ b/test/source/bootstrapfixture.cxx @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -98,12 +97,6 @@ SAL_DLLPUBLIC_EXPORT void test_init(lang::XMultiServiceFactory *pFactory) catch (...) { abort(); } } -// this is called from pyuno -SAL_DLLPUBLIC_EXPORT void test_fini() -{ - ::comphelper::ThreadPool::getSharedOptimalPool().shutdown(); -} - } // extern "C" void test::BootstrapFixture::setUp() diff --git a/test/source/vclbootstrapprotector.cxx b/test/source/vclbootstrapprotector.cxx index 2218c8fff2c0..38c51d990922 100644 --- a/test/source/vclbootstrapprotector.cxx +++ b/test/source/vclbootstrapprotector.cxx @@ -14,7 +14,6 @@ #include #include #include -#include #include @@ -29,8 +28,6 @@ public: private: virtual ~Protector() override { DeInitVCL(); - // for the 6 tests that use it - comphelper::ThreadPool::getSharedOptimalPool().shutdown(); } virtual bool protect( diff --git a/unotest/source/python/org/libreoffice/unotest.py b/unotest/source/python/org/libreoffice/unotest.py index 38c6b2266b31..13b00845bb36 100644 --- a/unotest/source/python/org/libreoffice/unotest.py +++ b/unotest/source/python/org/libreoffice/unotest.py @@ -182,9 +182,6 @@ class UnoInProcess: global havePonies if not(havePonies): pyuno.private_initTestEnvironment() - # note: this will be called early enough, from Py_Finalize - import atexit - atexit.register(pyuno.private_initTestEnvironment, False) havePonies = True def openEmptyWriterDoc(self): assert(self.xContext) -- cgit