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]
