summaryrefslogtreecommitdiff
path: root/postprocess
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-06-09 04:37:32 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-06-09 04:55:22 +0200
commit336364b46d71e08b441f0cc35b95d88bf1af40ff (patch)
treeee08ac459dbd4d8417758ee78d6f9b6ed8517fc5 /postprocess
parentf4f144b5bf1bd58b3b5fdd0919626d8918e70699 (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')
-rw-r--r--postprocess/qa/services.cxx19
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();
}
}