Author: jkupec Date: Tue Sep 25 11:07:54 2007 New Revision: 7351 URL: http://svn.opensuse.org/viewcvs/zypp?rev=7351&view=rev Log: - release all attached media before attempting to eject (#293428) Modified: trunk/libzypp/zypp/MediaSetAccess.cc trunk/libzypp/zypp/media/MediaManager.cc trunk/libzypp/zypp/media/MediaManager.h Modified: trunk/libzypp/zypp/MediaSetAccess.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/MediaSetAccess.cc?rev=7351&r1=7350&r2=7351&view=diff ============================================================================== --- trunk/libzypp/zypp/MediaSetAccess.cc (original) +++ trunk/libzypp/zypp/MediaSetAccess.cc Tue Sep 25 11:07:54 2007 @@ -166,17 +166,8 @@ else if ( user == media::MediaChangeReport::EJECT ) { DBG << "Eject: try to release" << endl; - try - { - //zypp::SourceManager::sourceManager()->releaseAllSources(); - } - catch (const zypp::Exception& excpt_r) - { - ZYPP_CAUGHT(excpt_r); - ERR << "Failed to release all sources" << endl; - } + media_mgr.releaseAll(); media_mgr.release (media, true); // one more release needed for eject - // FIXME: this will not work, probably } else if ( user == media::MediaChangeReport::RETRY || user == media::MediaChangeReport::CHANGE_URL ) @@ -283,17 +274,8 @@ else if ( user == media::MediaChangeReport::EJECT ) { DBG << "Eject: try to release" << endl; - try - { - //zypp::SourceManager::sourceManager()->releaseAllSources(); - } - catch (const zypp::Exception& excpt_r) - { - ZYPP_CAUGHT(excpt_r); - ERR << "Failed to release all sources" << endl; - } + media_mgr.releaseAll(); media_mgr.release (media, true); // one more release needed for eject - // FIXME: this will not work, probably } else if ( user == media::MediaChangeReport::RETRY || user == media::MediaChangeReport::CHANGE_URL ) @@ -414,18 +396,8 @@ else if (user == media::MediaChangeReport::EJECT) { DBG << "Eject: try to release" << endl; - try - { - //! \todo do we need replacement for this at all? - // zypp::SourceManager::sourceManager()->releaseAllSources(); - } - catch (const zypp::Exception& excpt_r) - { - ZYPP_CAUGHT(excpt_r); - ERR << "Failed to release all sources" << endl; - } + media_mgr.releaseAll(); media_mgr.release (_media, true); // one more release needed for eject - // FIXME: this will not work, probably } else if (user == media::MediaChangeReport::RETRY || user == media::MediaChangeReport::CHANGE_URL) Modified: trunk/libzypp/zypp/media/MediaManager.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/media/MediaManager.cc?rev=7351&r1=7350&r2=7351&view=diff ============================================================================== --- trunk/libzypp/zypp/media/MediaManager.cc (original) +++ trunk/libzypp/zypp/media/MediaManager.cc Tue Sep 25 11:07:54 2007 @@ -685,6 +685,43 @@ // --------------------------------------------------------------- void + MediaManager::releaseAll() + { + MutexLock glock(g_Mutex); + + MIL << "Releasing all attached media" << std::endl; + + ManagedMediaMap::iterator m(m_impl->mediaMap.begin()); + for( ; m != m_impl->mediaMap.end(); ++m) + { + if( m->second.handler->dependsOnParent()) + continue; + + try + { + if(m->second.handler->isAttached()) + { + DBG << "Releasing media id " << m->first << std::endl; + m->second.desired = false; + m->second.handler->release(false); + } + else + { + DBG << "Media id " << m->first << " not attached " << std::endl; + } + } + catch(const MediaException & e) + { + ZYPP_CAUGHT(e); + ERR << "Failed to release media id " << m->first << std::endl; + } + } + + MIL << "Exit" << std::endl; + } + + // --------------------------------------------------------------- + void MediaManager::disconnect(MediaAccessId accessId) { MutexLock glock(g_Mutex); Modified: trunk/libzypp/zypp/media/MediaManager.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/media/MediaManager.h?rev=7351&r1=7350&r2=7351&view=diff ============================================================================== --- trunk/libzypp/zypp/media/MediaManager.h (original) +++ trunk/libzypp/zypp/media/MediaManager.h Tue Sep 25 11:07:54 2007 @@ -603,6 +603,12 @@ release(MediaAccessId accessId, bool eject = false); /** + * Release all attached media. + */ + void + releaseAll(); + + /** * Disconnect a remote media. * * This is useful for media which e.g. holds open a connection -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org