- Fixed last change in close() -- don't complain, because
authorMarius Tomaschewski <mt@suse.de>
Mon, 13 Mar 2006 17:04:16 +0000 (17:04 +0000)
committerMarius Tomaschewski <mt@suse.de>
Mon, 13 Mar 2006 17:04:16 +0000 (17:04 +0000)
  may happen in destruction at exit as well (random order)

zypp/media/MediaManager.cc

index 7dbe91f..120fb0a 100644 (file)
@@ -237,28 +237,22 @@ namespace zypp
 
       ManagedMedia &ref( m_impl->findMM(accessId));
 
-      //
-      // The MediaISO handler internally requests an accessId
-      // of a "parent" handler providing the iso file.
-      // The parent handler accessId is private to MediaISO,
-      // but the attached media source may be shared reference.
-      // This means, that if the accessId belongs to a handler
-      // that is _not_ shared, close was used on uninitialized
-      // accessId variable (or the accessId was guessed).
-      //
       ManagedMediaMap::iterator m(m_impl->mediaMap.begin());
       for( ; m != m_impl->mediaMap.end(); ++m)
       {
         if( m->second.handler->dependsOnParent(accessId))
         {
-          if( !ref.handler->isSharedMedia())
+          // this may happen on exit (destructor run)
+          try
           {
-            ERR << "close attempt on a private id detected "
-                << "-- uninitialized access id variable?!"
-                << std::endl;
-            ZYPP_THROW(MediaIsSharedException(
-              m->second.handler->url().asString()
-            ));
+            DBG << "Forcing release of handler depending on access id "
+                << accessId << std::endl;
+            m->second.handler->release(false);
+            m->second.desired  = false;
+          }
+          catch(const MediaException &e)
+          {
+            ZYPP_CAUGHT(e);
           }
         }
       }