Imported Upstream version 17.13.0
[platform/upstream/libzypp.git] / zypp / media / MediaManager.cc
index 2097f96..28202ac 100644 (file)
@@ -18,8 +18,6 @@
 #include "zypp/media/MediaManager.h"
 #include "zypp/media/MediaHandler.h"
 #include "zypp/media/Mount.h"
-#include "zypp/thread/Mutex.h"
-#include "zypp/thread/MutexLock.h"
 
 #include "zypp/base/String.h"
 #include "zypp/base/Logger.h"
@@ -34,19 +32,10 @@ namespace zypp
   namespace media
   { //////////////////////////////////////////////////////////////////
 
-    using zypp::thread::Mutex;
-    using zypp::thread::MutexLock;
-
     //////////////////////////////////////////////////////////////////
     namespace // anonymous
     { ////////////////////////////////////////////////////////////////
 
-
-      // -------------------------------------------------------------
-      // STATIC
-      static Mutex  g_Mutex;
-
-
       // -------------------------------------------------------------
       struct ManagedMedia
       {
@@ -82,32 +71,29 @@ namespace zypp
           }
         }
 
-        inline void
-        checkDesired(MediaAccessId id)
+        inline void checkDesired( MediaAccessId id )
         {
-          checkAttached(id);
+          checkAttached( id );
 
-          if( !desired)
+          if ( !desired )
           {
             try {
               desired = verifier->isDesiredMedia(handler);
-            }
-            catch(const zypp::Exception &e) {
-              ZYPP_CAUGHT(e);
-              desired = false;
+            } catch ( const zypp::Exception &e ) {
+                ZYPP_CAUGHT( e );
+
+                media::MediaNotDesiredException newEx ( handler->url() );
+                newEx.remember( e );
+                ZYPP_THROW( newEx );
             }
 
-            if( !desired)
+            if( !desired )
             {
-              DBG << "checkDesired(" << id << "): not desired (report by "
-                  << verifier->info() << ")" << std::endl;
-              ZYPP_THROW(MediaNotDesiredException(
-                handler->url()
-              ));
+              DBG << "checkDesired(" << id << "): not desired (report by " << verifier->info() << ")" << std::endl;
+              ZYPP_THROW( MediaNotDesiredException( handler->url() ) );
             }
 
-            DBG << "checkDesired(" << id << "): desired (report by "
-                << verifier->info() << ")" << std::endl;
+            DBG << "checkDesired(" << id << "): desired (report by " << verifier->info() << ")" << std::endl;
           } else {
             DBG << "checkDesired(" << id << "): desired (cached)" << std::endl;
           }
@@ -159,8 +145,6 @@ namespace zypp
     public:
       ~MediaManager_Impl()
       {
-        MutexLock glock(g_Mutex);
-
         try
         {
           // remove depending (iso) handlers first
@@ -231,9 +215,7 @@ namespace zypp
       static inline MountEntries
       getMountEntries()
       {
-        // use "/etc/mtab" by default,
-        // fallback to "/proc/mounts"
-        return Mount::getEntries(/* "/etc/mtab" */);
+        return Mount::getEntries();
       }
 
     };
@@ -241,13 +223,12 @@ namespace zypp
 
     //////////////////////////////////////////////////////////////////
     // STATIC
-    zypp::RW_pointer<MediaManager_Impl> MediaManager::m_impl(NULL);
+    zypp::RW_pointer<MediaManager_Impl> MediaManager::m_impl;
 
 
     //////////////////////////////////////////////////////////////////
     MediaManager::MediaManager()
     {
-      MutexLock glock(g_Mutex);
       if( !m_impl)
       {
         m_impl.reset( new MediaManager_Impl());
@@ -263,8 +244,6 @@ namespace zypp
     MediaAccessId
     MediaManager::open(const Url &url, const Pathname &preferred_attach_point)
     {
-      MutexLock glock(g_Mutex);
-
       // create new access handler for it
       MediaAccessRef handler( new MediaAccess());
       MediaVerifierRef verifier( new NoVerifier());
@@ -285,8 +264,6 @@ namespace zypp
     void
     MediaManager::close(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       //
       // The MediaISO handler internally requests an accessId
       // of a "parent" handler providing the iso file.
@@ -321,8 +298,6 @@ namespace zypp
     bool
     MediaManager::isOpen(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMediaMap::iterator it( m_impl->mediaMap.find(accessId));
       return it != m_impl->mediaMap.end() &&
              it->second.handler->isOpen();
@@ -332,8 +307,6 @@ namespace zypp
     std::string
     MediaManager::protocol(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->protocol();
@@ -343,8 +316,6 @@ namespace zypp
          bool
     MediaManager::downloads(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->downloads();
@@ -354,8 +325,6 @@ namespace zypp
     Url
     MediaManager::url(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->url();
@@ -366,8 +335,6 @@ namespace zypp
     MediaManager::addVerifier(MediaAccessId           accessId,
                               const MediaVerifierRef &verifier)
     {
-      MutexLock glock(g_Mutex);
-
       if( !verifier)
         ZYPP_THROW(MediaException("Invalid verifier reference"));
 
@@ -384,8 +351,6 @@ namespace zypp
     void
     MediaManager::delVerifier(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       MediaVerifierRef verifier( new NoVerifier());
@@ -400,16 +365,12 @@ namespace zypp
     bool
     MediaManager::setAttachPrefix(const Pathname &attach_prefix)
     {
-      MutexLock glock(g_Mutex);
-
       return MediaHandler::setAttachPrefix(attach_prefix);
     }
 
     // ---------------------------------------------------------------
     void MediaManager::attach(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       DBG << "attach(id=" << accessId << ")" << std::endl;
@@ -478,8 +439,6 @@ namespace zypp
     void
     MediaManager::release(MediaAccessId accessId, const std::string & ejectDev)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       DBG << "release(id=" << accessId;
@@ -522,8 +481,6 @@ namespace zypp
     void
     MediaManager::releaseAll()
     {
-      MutexLock glock(g_Mutex);
-
       MIL << "Releasing all attached media" << std::endl;
 
       ManagedMediaMap::iterator m(m_impl->mediaMap.begin());
@@ -559,8 +516,6 @@ namespace zypp
     void
     MediaManager::disconnect(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.handler->disconnect();
@@ -570,8 +525,6 @@ namespace zypp
     bool
     MediaManager::isAttached(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->isAttached();
@@ -580,8 +533,6 @@ namespace zypp
     // ---------------------------------------------------------------
     bool MediaManager::isSharedMedia(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->isSharedMedia();
@@ -591,8 +542,6 @@ namespace zypp
     bool
     MediaManager::isDesiredMedia(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       if( !ref.handler->isAttached())
@@ -621,8 +570,6 @@ namespace zypp
     MediaManager::isDesiredMedia(MediaAccessId           accessId,
                                  const MediaVerifierRef &verifier) const
     {
-      MutexLock glock(g_Mutex);
-
       MediaVerifierRef v(verifier);
       if( !v)
         ZYPP_THROW(MediaException("Invalid verifier reference"));
@@ -658,8 +605,6 @@ namespace zypp
     Pathname
     MediaManager::localRoot(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       Pathname path;
@@ -672,8 +617,6 @@ namespace zypp
     MediaManager::localPath(MediaAccessId accessId,
                             const Pathname & pathname) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       Pathname path;
@@ -681,27 +624,31 @@ namespace zypp
       return path;
     }
 
-    // ---------------------------------------------------------------
     void
     MediaManager::provideFile(MediaAccessId   accessId,
-                              const Pathname &filename ) const
+                              const Pathname &filename,
+                              const ByteCount &expectedFileSize ) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkDesired(accessId);
 
-      ref.handler->provideFile(filename);
+      ref.handler->provideFile(filename, expectedFileSize);
     }
 
     // ---------------------------------------------------------------
     void
-    MediaManager::setDeltafile(MediaAccessId   accessId,
+    MediaManager::provideFile(MediaAccessId   accessId,
                               const Pathname &filename ) const
     {
-      MutexLock glock(g_Mutex);
+      provideFile( accessId, filename, 0);
+    }
 
+    // ---------------------------------------------------------------
+    void
+    MediaManager::setDeltafile(MediaAccessId   accessId,
+                              const Pathname &filename ) const
+    {
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkDesired(accessId);
@@ -714,8 +661,6 @@ namespace zypp
     MediaManager::provideDir(MediaAccessId   accessId,
                              const Pathname &dirname) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkDesired(accessId);
@@ -728,8 +673,6 @@ namespace zypp
     MediaManager::provideDirTree(MediaAccessId   accessId,
                                  const Pathname &dirname) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkDesired(accessId);
@@ -742,8 +685,6 @@ namespace zypp
     MediaManager::releaseFile(MediaAccessId   accessId,
                               const Pathname &filename) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkAttached(accessId);
@@ -756,8 +697,6 @@ namespace zypp
     MediaManager::releaseDir(MediaAccessId   accessId,
                              const Pathname &dirname) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkAttached(accessId);
@@ -771,8 +710,6 @@ namespace zypp
     MediaManager::releasePath(MediaAccessId   accessId,
                               const Pathname &pathname) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.checkAttached(accessId);
@@ -787,8 +724,6 @@ namespace zypp
                           const Pathname         &dirname,
                           bool                    dots) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       // FIXME: ref.checkDesired(accessId); ???
@@ -804,8 +739,6 @@ namespace zypp
                           const Pathname         &dirname,
                           bool                    dots) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       // FIXME: ref.checkDesired(accessId); ???
@@ -818,7 +751,6 @@ namespace zypp
     bool
     MediaManager::doesFileExist(MediaAccessId  accessId, const Pathname & filename ) const
     {
-      MutexLock glock(g_Mutex);
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       // FIXME: ref.checkDesired(accessId); ???
@@ -833,7 +765,6 @@ namespace zypp
                                      std::vector<std::string> & devices,
                                      unsigned int & index) const
     {
-      MutexLock glock(g_Mutex);
       ManagedMedia &ref( m_impl->findMM(accessId));
       return ref.handler->getDetectedDevices(devices, index);
     }
@@ -843,7 +774,6 @@ namespace zypp
     time_t
     MediaManager::getMountTableMTime()
     {
-      MutexLock glock(g_Mutex);
       return MediaManager_Impl::getMountTableMTime();
     }
 
@@ -852,8 +782,6 @@ namespace zypp
     MountEntries
     MediaManager::getMountEntries()
     {
-      MutexLock glock(g_Mutex);
-
       return MediaManager_Impl::getMountEntries();
     }
 
@@ -865,8 +793,6 @@ namespace zypp
       if( path.empty() || path == "/" || !PathInfo(path).isDir())
         return false;
 
-      MutexLock glock(g_Mutex);
-
       //
       // check against our current attach points
       //
@@ -932,8 +858,6 @@ namespace zypp
     AttachedMedia
     MediaManager::getAttachedMedia(MediaAccessId &accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       return ref.handler->attachedMedia();
@@ -943,8 +867,6 @@ namespace zypp
     AttachedMedia
     MediaManager::findAttachedMedia(const MediaSourceRef &media) const
     {
-      MutexLock glock(g_Mutex);
-
       if( !media || media->type.empty())
         return AttachedMedia();
 
@@ -965,8 +887,6 @@ namespace zypp
     void
     MediaManager::forceReleaseShared(const MediaSourceRef &media)
     {
-      MutexLock glock(g_Mutex);
-
       if( !media || media->type.empty())
         return;