openoffice-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zhan...@apache.org
Subject svn commit: r1351332 - in /incubator/ooo/trunk/main: animations/source/animcore/animcore.cxx svx/inc/svx/svdobj.hxx svx/source/svdraw/svdobj.cxx
Date Mon, 18 Jun 2012 13:26:30 GMT
Author: zhangjf
Date: Mon Jun 18 13:26:30 2012
New Revision: 1351332

URL: http://svn.apache.org/viewvc?rev=1351332&view=rev
Log:
#113608#, memory leak in animations: All animation nodes are leaked and new exposed crashed
problem

Patch by: zhangjf
Review by: Andre Fischer

Modified:
    incubator/ooo/trunk/main/animations/source/animcore/animcore.cxx
    incubator/ooo/trunk/main/svx/inc/svx/svdobj.hxx
    incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx

Modified: incubator/ooo/trunk/main/animations/source/animcore/animcore.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/animations/source/animcore/animcore.cxx?rev=1351332&r1=1351331&r2=1351332&view=diff
==============================================================================
--- incubator/ooo/trunk/main/animations/source/animcore/animcore.cxx (original)
+++ incubator/ooo/trunk/main/animations/source/animcore/animcore.cxx Mon Jun 18 13:26:30 2012
@@ -49,6 +49,7 @@
 #include <com/sun/star/util/XChangesNotifier.hpp>
 #include <com/sun/star/lang/XUnoTunnel.hpp>
 #include <cppuhelper/interfacecontainer.hxx>
+#include <cppuhelper/weakref.hxx>
 
 #include <cppuhelper/implbase1.hxx>
 #include <rtl/uuid.h>
@@ -68,6 +69,7 @@ using ::com::sun::star::uno::XInterface;
 using ::com::sun::star::uno::RuntimeException;
 using ::com::sun::star::uno::Sequence;
 using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::WeakReference;
 using ::com::sun::star::uno::XComponentContext;
 using ::com::sun::star::uno::Exception;
 using ::com::sun::star::uno::XWeak;
@@ -307,7 +309,7 @@ private:
 	Sequence< NamedValue > maUserData;
 
 	// parent interface for XChild interface implementation
-	Reference<XInterface>	mxParent;
+	WeakReference<XInterface>	mxParent;
 	AnimationNode*			mpParent;
 
 	// attributes for XAnimate
@@ -1141,7 +1143,7 @@ void SAL_CALL AnimationNode::setUserData
 Reference< XInterface > SAL_CALL AnimationNode::getParent() throw (RuntimeException)
 {
 	Guard< Mutex > aGuard( maMutex );
-	return mxParent;
+	return mxParent.get();
 }
 
 // --------------------------------------------------------------------
@@ -1150,12 +1152,12 @@ Reference< XInterface > SAL_CALL Animati
 void SAL_CALL AnimationNode::setParent( const Reference< XInterface >& Parent )
throw (NoSupportException, RuntimeException)
 {
 	Guard< Mutex > aGuard( maMutex );
-	if( Parent != mxParent )
+	if( Parent != mxParent.get() )
 	{
 		mxParent = Parent;
 
 		mpParent = 0;
-		Reference< XUnoTunnel > xTunnel( mxParent, UNO_QUERY );
+		Reference< XUnoTunnel > xTunnel( mxParent.get(), UNO_QUERY );
 		if( xTunnel.is() )
 			mpParent = reinterpret_cast< AnimationNode* >( sal::static_int_cast< sal_IntPtr
>(xTunnel->getSomething( getUnoTunnelId() ))); 
 
@@ -2067,7 +2069,7 @@ void AnimationNode::fireChangeListener()
 	{
 		Reference< XInterface > xSource( static_cast<OWeakObject*>(this), UNO_QUERY
);
 		Sequence< ElementChange > aChanges;
-		const ChangesEvent aEvent( xSource, makeAny( mxParent ), aChanges );
+		const ChangesEvent aEvent( xSource, makeAny( mxParent.get() ), aChanges );
 		while( aIterator.hasMoreElements() )
 		{
 			Reference< XChangesListener > xListener( aIterator.next(), UNO_QUERY );

Modified: incubator/ooo/trunk/main/svx/inc/svx/svdobj.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/inc/svx/svdobj.hxx?rev=1351332&r1=1351331&r2=1351332&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/inc/svx/svdobj.hxx (original)
+++ incubator/ooo/trunk/main/svx/inc/svx/svdobj.hxx Mon Jun 18 13:26:30 2012
@@ -1127,7 +1127,7 @@ protected:
 private:
 	/** only for internal use!
 	*/
-	SvxShape* getSvxShape() const;
+	SvxShape* getSvxShape();
 
 	/** do not use directly, always use getSvxShape() if you have to! */
 	SvxShape*   mpSvxShape;

Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx?rev=1351332&r1=1351331&r2=1351332&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdobj.cxx Mon Jun 18 13:26:30 2012
@@ -2914,17 +2914,20 @@ void SdrObject::impl_setUnoShape( const 
 }
 
 /** 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;
 }



Mime
View raw message