diff -ur orig/svx/inc/svx/svdobj.hxx new/svx/inc/svx/svdobj.hxx --- orig/svx/inc/svx/svdobj.hxx 2012-06-16 09:16:58.256541000 +0800 +++ new/svx/inc/svx/svdobj.hxx 2012-06-17 21:32:08.469225500 +0800 @@ -1127,7 +1127,7 @@ private: /** only for internal use! */ - SvxShape* getSvxShape() const; + SvxShape* getSvxShape(); /** do not use directly, always use getSvxShape() if you have to! */ SvxShape* mpSvxShape; diff -ur orig/svx/source/svdraw/svdobj.cxx new/svx/source/svdraw/svdobj.cxx --- orig/svx/source/svdraw/svdobj.cxx 2012-06-16 09:16:58.147162500 +0800 +++ new/svx/source/svdraw/svdobj.cxx 2012-06-17 21:48:48.891863000 +0800 @@ -2914,17 +2914,20 @@ } /** only for internal use! */ -SvxShape* SdrObject::getSvxShape() const +SvxShape* SdrObject::getSvxShape() { DBG_TESTSOLARMUTEX(); // retrieving the impl pointer and subsequently using it is not thread-safe, of course, so it needs to be // guarded by the SolarMutex -#if OSL_DEBUG_LEVE > 0 uno::Reference< uno::XInterface > xShape( maWeakUnoShape ); - OSL_ENSURE( !( !xShapeGuard.is() && mpSvxShape ), +#if OSL_DEBUG_LEVE > 0 + OSL_ENSURE( !( !xShape.is() && mpSvxShape ), "SdrObject::getSvxShape: still having IMPL-Pointer to dead object!" ); #endif + //#113608#, make sure mpSvxShape is always synchronized with maWeakUnoShape + if ( mpSvxShape && !xShape.is() ) + mpSvxShape = NULL; return mpSvxShape; }