embeddedobj/source/commonembedding/embedobj.cxx |    1 -
 sw/source/core/ole/ndole.cxx                    |    6 ++----
 2 files changed, 2 insertions(+), 5 deletions(-)

New commits:
commit b717bda1f6484905aebc571c4538165a1fbfd2bb
Author: Mike Kaganski <[email protected]>
Date:   Mon May 18 00:03:41 2015 +1000

    tdf#67421: Prevent unloading objects due to cache full
    
    When an object is added to OLE objects cache, when cache is full,
    old objects are tried to be unloaded. This triggers notifications
    that cause all loaded objects to become active, and to be added to
    cache (moved to front).
    
    As the new object already was added to front of the cache, later
    activity pushes it to back, until it is the last object in cache.
    The cache in this process is overfilled, so each next refresh tries
    to unload current last OLE object. So, in the end, this effectively
    unloads all cached OLE objects.
    
    This patch prevents this by first unloading last object, and then
    adding new object to front of cache.
    
    Also, removed needless creation of reference (makes at least 200
    function calls for no reason).
    
    Change-Id: Ia903f4df101971df1b0b0148320fc8e45ac1e79c
    Reviewed-on: https://gerrit.libreoffice.org/15772
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/embeddedobj/source/commonembedding/embedobj.cxx 
b/embeddedobj/source/commonembedding/embedobj.cxx
index 9e24276..4be6cc9 100644
--- a/embeddedobj/source/commonembedding/embedobj.cxx
+++ b/embeddedobj/source/commonembedding/embedobj.cxx
@@ -421,7 +421,6 @@ void SAL_CALL OCommonEmbeddedObject::changeState( sal_Int32 
nNewState )
                 uno::Exception,
                 uno::RuntimeException, std::exception )
 {
-    uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >( 
this ), uno::UNO_QUERY);
     {
         ::osl::ResettableMutexGuard aGuard( m_aMutex );
         if ( m_bDisposed )
diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx
index 649d0b7..d69ddd9 100644
--- a/sw/source/core/ole/ndole.cxx
+++ b/sw/source/core/ole/ndole.cxx
@@ -972,18 +972,16 @@ void SwOLELRUCache::InsertObj( SwOLEObj& rObj )
     }
     if (it == m_OleObjects.end())
     {
-        m_OleObjects.push_front( pObj );
-
         // try to remove objects if necessary
-        // (of course not the freshly inserted one at nPos=0)
         sal_Int32 nCount = m_OleObjects.size();
         sal_Int32 nPos = nCount-1;
-        while (nPos && nCount > m_nLRU_InitSize)
+        while (nPos >= 0 && nCount >= m_nLRU_InitSize)
         {
             pObj = m_OleObjects[ nPos-- ];
             if ( pObj->UnloadObject() )
                 nCount--;
         }
+        m_OleObjects.push_front(&rObj);
     }
 }
 
_______________________________________________
Libreoffice-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to