User: rt      
Date: 2006/12/01 09:29:22

Modified:
   dba/dbaccess/source/core/dataaccess/databasedocument.cxx

Log:
 INTEGRATION: CWS dba22a (1.30.22); FILE MERGED
 2006/11/23 10:19:25 fs 1.30.22.1: #i71549# disconnectController: account for 
the case where the disconnecting controller is unknown (ppathological, but 
possible)

File Changes:

Directory: /dba/dbaccess/source/core/dataaccess/
================================================

File [changed]: databasedocument.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/databasedocument.cxx?r1=1.30&r2=1.31
Delta lines:  +11 -3
--------------------
--- databasedocument.cxx        17 Sep 2006 06:39:27 -0000      1.30
+++ databasedocument.cxx        1 Dec 2006 17:29:18 -0000       1.31
@@ -347,7 +347,11 @@
     ModelMethodGuard aGuard( *this );
     OSL_ENSURE(m_pImpl.is(),"Impl is NULL");
 
-    
m_pImpl->m_aControllers.erase(::std::find(m_pImpl->m_aControllers.begin(),m_pImpl->m_aControllers.end(),_xController));
+    ControllerArray::iterator pos = ::std::find( 
m_pImpl->m_aControllers.begin(), m_pImpl->m_aControllers.end(), _xController );
+    OSL_ENSURE( pos != m_pImpl->m_aControllers.end(), 
"ODatabaseDocument::disconnectController: don't know this controller!" );
+    if ( pos != m_pImpl->m_aControllers.end() )
+        m_pImpl->m_aControllers.erase( pos );
+
        if ( m_pImpl->m_xCurrentController == _xController )
                m_pImpl->m_xCurrentController = NULL;
 
@@ -1079,9 +1083,8 @@
     }
 
     DBG_ASSERT( m_pImpl->m_aControllers.empty(), 
"ODatabaseDocument::disposing: there still are controllers!" );
-        // normally, nobody should explicitly dispose, but only 
XCloseable::close the document.An upon
+        // normally, nobody should explicitly dispose, but only 
XCloseable::close the document. And upon
         // closing, our controllers are closed, too
-    m_pImpl->m_aControllers.clear();
 
     Reference< XModel > xHoldAlive( this );
     {
@@ -1101,7 +1104,12 @@
                clearObjectContainer( m_xReports);
 
         m_pImpl->modelIsDisposing( ODatabaseModelImpl::ResetModelAccess() );
+
+        // now, at the latest, the controller array should be empty. 
Controllers are
+        // expected to listen for our disposal, and disconnect then
+        DBG_ASSERT( m_pImpl->m_aControllers.empty(), 
"ODatabaseDocument::disposing: there still are controllers!" );
     }
+
        m_pImpl.clear();
 }
 // 
-----------------------------------------------------------------------------




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to