summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-10-02 23:25:44 +0200
committerMichael Stahl <mstahl@redhat.com>2013-10-02 23:52:44 +0200
commit78f05c0a6514ca084051f16498513033dacb14aa (patch)
treea6d26de1ea3fb137cd2e1d87b8b085a4a33c4874 /svx
parentcf88ebc1f7d358a1dcd9e5b49026194e05916896 (diff)
toolkit: avoid deadlock in UnoControl::setDesignMode()
Avoid deadlock by disposing the accesibility context without the Mutex locked, since it will eventually try to acquire the SolarMutex... Thread 1 in UnoControl::getPosSize() calling from sdr::contact::ControlHolder::getPosSize() Thread 2 calling from UnoControl::setDesignMode() trying to get SolarMutex in VCLXWindow::disposing() Change-Id: I7d0ffe4fa0f8cd0c48e9b9b5e923ce229f97ca57
Diffstat (limited to 'svx')
-rw-r--r--svx/source/fmcomp/fmgridif.cxx4
1 files changed, 3 insertions, 1 deletions
diff --git a/svx/source/fmcomp/fmgridif.cxx b/svx/source/fmcomp/fmgridif.cxx
index 8d6e0752645d..358328bfc844 100644
--- a/svx/source/fmcomp/fmgridif.cxx
+++ b/svx/source/fmcomp/fmgridif.cxx
@@ -787,7 +787,9 @@ void SAL_CALL FmXGridControl::setDesignMode(sal_Bool bOn) throw( RuntimeExceptio
// dispose our current AccessibleContext, if we have one
// (changing the design mode implies having a new implementation for this context,
// so the old one must be declared DEFUNC)
- disposeAccessibleContext();
+ DisposeAccessibleContext(
+ Reference<XComponent>(maAccessibleContext, UNO_QUERY));
+ maAccessibleContext.clear();
// prepare firing an event
aModeChangeEvent.Source = *this;