Imported Upstream version 17.13.0
[platform/upstream/libzypp.git] / zypp / media / MediaManager.cc
index 0144ca1..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
@@ -239,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());
@@ -261,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());
@@ -283,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.
@@ -319,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();
@@ -330,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();
@@ -341,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();
@@ -352,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();
@@ -364,8 +335,6 @@ namespace zypp
     MediaManager::addVerifier(MediaAccessId           accessId,
                               const MediaVerifierRef &verifier)
     {
-      MutexLock glock(g_Mutex);
-
       if( !verifier)
         ZYPP_THROW(MediaException("Invalid verifier reference"));
 
@@ -382,8 +351,6 @@ namespace zypp
     void
     MediaManager::delVerifier(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       MediaVerifierRef verifier( new NoVerifier());
@@ -398,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;
@@ -476,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;
@@ -520,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());
@@ -557,8 +516,6 @@ namespace zypp
     void
     MediaManager::disconnect(MediaAccessId accessId)
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       ref.handler->disconnect();
@@ -568,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();
@@ -578,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();
@@ -589,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())
@@ -619,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"));
@@ -656,8 +605,6 @@ namespace zypp
     Pathname
     MediaManager::localRoot(MediaAccessId accessId) const
     {
-      MutexLock glock(g_Mutex);
-
       ManagedMedia &ref( m_impl->findMM(accessId));
 
       Pathname path;
@@ -670,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;
@@ -679,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);
@@ -712,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);
@@ -726,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);
@@ -740,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);
@@ -754,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);
@@ -769,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);
@@ -785,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); ???
@@ -802,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); ???
@@ -816,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); ???
@@ -831,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);
     }
@@ -841,7 +774,6 @@ namespace zypp
     time_t
     MediaManager::getMountTableMTime()
     {
-      MutexLock glock(g_Mutex);
       return MediaManager_Impl::getMountTableMTime();
     }
 
@@ -850,8 +782,6 @@ namespace zypp
     MountEntries
     MediaManager::getMountEntries()
     {
-      MutexLock glock(g_Mutex);
-
       return MediaManager_Impl::getMountEntries();
     }
 
@@ -863,8 +793,6 @@ namespace zypp
       if( path.empty() || path == "/" || !PathInfo(path).isDir())
         return false;
 
-      MutexLock glock(g_Mutex);
-
       //
       // check against our current attach points
       //
@@ -930,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();
@@ -941,8 +867,6 @@ namespace zypp
     AttachedMedia
     MediaManager::findAttachedMedia(const MediaSourceRef &media) const
     {
-      MutexLock glock(g_Mutex);
-
       if( !media || media->type.empty())
         return AttachedMedia();
 
@@ -963,8 +887,6 @@ namespace zypp
     void
     MediaManager::forceReleaseShared(const MediaSourceRef &media)
     {
-      MutexLock glock(g_Mutex);
-
       if( !media || media->type.empty())
         return;