diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-06-09 04:37:32 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-06-09 04:55:22 +0200 |
commit | 336364b46d71e08b441f0cc35b95d88bf1af40ff (patch) | |
tree | ee08ac459dbd4d8417758ee78d6f9b6ed8517fc5 /postprocess/qa | |
parent | f4f144b5bf1bd58b3b5fdd0919626d8918e70699 (diff) |
Revert "Revert "Make sure to dispose services supporting the XComponent protocol""
This reverts commit 044be7107a97169e80360c79a9d07bec263ac818.
It only works sometimes. Still a deadlock based on a race condition.
Diffstat (limited to 'postprocess/qa')
-rw-r--r-- | postprocess/qa/services.cxx | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx index c9d30f4f1031..2d29e918a420 100644 --- a/postprocess/qa/services.cxx +++ b/postprocess/qa/services.cxx @@ -9,7 +9,10 @@ #include <sal/config.h> +#include <vector> + #include <com/sun/star/container/XHierarchicalNameAccess.hpp> +#include <com/sun/star/lang/XComponent.hpp> #include <com/sun/star/reflection/XServiceConstructorDescription.hpp> #include <com/sun/star/reflection/XServiceTypeDescription2.hpp> #include <test/bootstrapfixture.hxx> @@ -37,6 +40,7 @@ void ServicesTest::test() "/singletons/com.sun.star.reflection.theTypeDescriptionManager"), UNO_QUERY_THROW ); Sequence<OUString> s = m_xContext->getServiceManager()->getAvailableServiceNames(); + std::vector< css::uno::Reference<css::lang::XComponent> > comps; for (sal_Int32 i = 0; i < s.getLength(); i++) { if (!xTypeManager->hasByHierarchicalName(s[i])) @@ -54,12 +58,13 @@ void ServicesTest::test() Sequence< Reference< XServiceConstructorDescription > > xseq = xDesc->getConstructors(); for (sal_Int32 c = 0; c < xseq.getLength(); c++) if (!xseq[c]->getParameters().hasElements()) + { + Reference< XInterface > instance; try { OString message = OUStringToOString(s[i], RTL_TEXTENCODING_UTF8); bool bDefConstructor = xseq[c]->isDefaultConstructor(); Reference< css::lang::XMultiComponentFactory > serviceManager = m_xContext->getServiceManager(); - Reference< XInterface > instance; if( bDefConstructor ) instance = serviceManager->createInstanceWithContext(s[i], m_xContext); @@ -75,6 +80,18 @@ void ServicesTest::test() OUStringToOString(s[i] + ": " + e.Message, RTL_TEXTENCODING_UTF8); CPPUNIT_FAIL(exc.getStr()); } + css::uno::Reference<css::lang::XComponent> comp( + instance, css::uno::UNO_QUERY); + if (comp.is()) { + comps.push_back(comp); + } + } + } + for (std::vector< css::uno::Reference<css::lang::XComponent> >::iterator i( + comps.begin()); + i != comps.end(); ++i) + { + (*i)->dispose(); } } |