summaryrefslogtreecommitdiff
path: root/qadevOOo/tests/java/mod
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-01-04 11:58:19 +0100
committerStephan Bergmann <sbergman@redhat.com>2017-01-04 12:11:20 +0100
commit1677faabbf7ae56e233205251b78b77d28937c35 (patch)
tree9ae0df17a5d43edbc471c0167c0116e84423cc42 /qadevOOo/tests/java/mod
parent49f3dc55dd4a425a45fdd2b86d285e616559f366 (diff)
SwXAutoTextEntry needs a disposal protocol
SwXAutoTextEntry::GetBodyText calls SwGlossaries::EditGroupDoc to create a Sw[Web]GlosDocShell (which it then stores in xDocSh), and there must be a call to that shell's DoClose to clean up its resources. However, if a reference to the SwXAutoTextEntry is still held during XDesktop::terminate (as can happen in JunitTest_sw_unoapi_1, where such a reference is held from Java, thus arbitrarily delaying destruction of the SwXAutoTextEntry until the JVM does GC), SwXAutoTextEntry::Notify's PrepareCloseDoc case will release xDocSh without calling DoClose, so an eventual ~SwXAutoTextEntry will not call DoClose either. (And calling DoClose from withing SwXAutoTextEntry::Notify would cause a crash, as it would destroy the SwGlosDocShell recursively from within its SfxBroadcaster::Broadcast call.) So introduce a disposal protocol for XAutoTextEntry and call it at least in the place that caused the resource leak in JunitTest_sw_unoapi_1. For lack of a better inerface, reuse css.lang.XComponent for that protocol, even though this scenario doesn't involve breaking cyclic references among UNO objects caused by listener patterns. Change-Id: Id6501b84e562950e40b83e0b1afd1b3184807856
Diffstat (limited to 'qadevOOo/tests/java/mod')
-rw-r--r--qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java6
1 files changed, 6 insertions, 0 deletions
diff --git a/qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java b/qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java
index 188307e83ed6..30a7ada714c1 100644
--- a/qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java
+++ b/qadevOOo/tests/java/mod/_sw/SwXAutoTextEntry.java
@@ -87,11 +87,17 @@ public class SwXAutoTextEntry extends TestCase {
try {
if ( oGroup.hasByName("NewEntryName") ) {
log.println("Removing 'NewEntryName' element");
+ ((com.sun.star.lang.XComponent) AnyConverter.toObject(
+ new Type(com.sun.star.lang.XComponent.class),
+ oGroup.getByName("NewEntryName"))).dispose();
oGroup.removeByName("NewEntryName");
}
} catch ( com.sun.star.container.NoSuchElementException e ) {
log.println("Cannot remove TextEntry from group...");
e.printStackTrace(log);
+ } catch ( com.sun.star.lang.WrappedTargetException e ) {
+ log.println("Cannot remove TextEntry from group...");
+ e.printStackTrace(log);
}
log.println( "disposing xTextDoc " );
util.DesktopTools.closeDoc(xTextDoc);