postprocess/qa/services.cxx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
New commits: commit 336364b46d71e08b441f0cc35b95d88bf1af40ff Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Mon Jun 9 04:37:32 2014 +0200 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. diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx index c9d30f4..2d29e91 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(); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits