[Libreoffice-commits] .: sw/source

Caolán McNamara caolan at kemper.freedesktop.org
Wed May 25 05:22:58 PDT 2011


 sw/source/core/doc/docnew.cxx |   31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

New commits:
commit fb5c25294efd2ef9138df61e82cd438ff07f4bf1
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed May 25 13:20:11 2011 +0100

    Resolves: fdo#35937 temp ole docshell on dtor deletes SwDoc on 0 refcount
    
    copy of ole objects creates a temp docshell, whose dtor on 0 ref count deletes
    the SwDoc handle. So add an acquire/release pair.

diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index 0527ab9..6cc62a1 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -1048,6 +1048,7 @@ void SwDoc::InitTOXTypes()
 SfxObjectShell* SwDoc::CreateCopy(bool bCallInitNew ) const
 {
     SwDoc* pRet = new SwDoc;
+
     //copy settings
     sal_uInt16 aRangeOfDefaults[] = {
         RES_FRMATR_BEGIN, RES_FRMATR_END-1,
@@ -1058,22 +1059,24 @@ SfxObjectShell* SwDoc::CreateCopy(bool bCallInitNew ) const
         0
     };
 
-    SfxItemSet aNewDefaults( pRet->GetAttrPool(), aRangeOfDefaults );
-
-    sal_uInt16 nWhich;
-    sal_uInt16 nRange = 0;
-    while( aRangeOfDefaults[nRange] != 0)
     {
-        for( nWhich = aRangeOfDefaults[nRange]; nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich )
+        SfxItemSet aNewDefaults( pRet->GetAttrPool(), aRangeOfDefaults );
+
+        sal_uInt16 nWhich;
+        sal_uInt16 nRange = 0;
+        while( aRangeOfDefaults[nRange] != 0)
         {
-            const SfxPoolItem& rSourceAttr = mpAttrPool->GetDefaultItem( nWhich );
-            if( rSourceAttr != pRet->mpAttrPool->GetDefaultItem( nWhich ) )
-                aNewDefaults.Put( rSourceAttr );
+            for( nWhich = aRangeOfDefaults[nRange]; nWhich < aRangeOfDefaults[nRange + 1]; ++nWhich )
+            {
+                const SfxPoolItem& rSourceAttr = mpAttrPool->GetDefaultItem( nWhich );
+                if( rSourceAttr != pRet->mpAttrPool->GetDefaultItem( nWhich ) )
+                    aNewDefaults.Put( rSourceAttr );
+            }
+            nRange += 2;
         }
-        nRange += 2;
+        if( aNewDefaults.Count() )
+            pRet->SetDefault( aNewDefaults );
     }
-    if( aNewDefaults.Count() )
-        pRet->SetDefault( aNewDefaults );
 
     pRet->n32DummyCompatabilityOptions1 = n32DummyCompatabilityOptions1;
     pRet->n32DummyCompatabilityOptions2 = n32DummyCompatabilityOptions2;
@@ -1117,12 +1120,16 @@ SfxObjectShell* SwDoc::CreateCopy(bool bCallInitNew ) const
         pRetShell->DoInitNew();
     }
 
+    pRet->acquire();
+
     //copy content 
     pRet->Paste( *this );
 
     // remove the temporary shell if it is there as it was done before
     pRet->SetTmpDocShell( (SfxObjectShell*)NULL );
 
+    pRet->release();
+
     return pRetShell;
 }
 


More information about the Libreoffice-commits mailing list