pvl/backup/mount.py
changeset 78 5698225aab66
parent 69 468704db09c4
--- a/pvl/backup/mount.py	Wed May 01 00:38:58 2013 +0300
+++ b/pvl/backup/mount.py	Mon Feb 17 22:06:46 2014 +0200
@@ -61,7 +61,7 @@
         if not os.path.isdir(self.mnt) :
             raise MountError("Mountpoint is not a directory: {mnt}".format(mnt=self.mnt))
 
-        if os.path.ismount(self.mnt) :
+        if self.is_mounted() :
             raise MountError("Mountpoint is already mounted: {mnt}".format(mnt=self.mnt))
 
         if not os.path.exists(self.dev) :
@@ -70,13 +70,25 @@
         # mount
         invoke(self.MOUNT, optargs(self.dev, self.mnt, options=self.options()), sudo=self.sudo)
 
+    def is_mounted (self) :
+        """
+            Test if the given mountpoint is mounted.
+        """
+        
+        # workaround http://bugs.python.org/issue2466
+        if os.path.exists(self.mnt) and not os.path.exists(os.path.join(self.mnt, '.')) :
+            # this is a sign of a mountpoint that we do not have access to
+            return True
+
+        return os.path.ismount(self.mnt)
+
     def close (self) :
         """
             Un-mount
         """
 
         # check
-        if not os.path.ismount(self.mnt):
+        if not self.is_mounted() :
             raise MountError("Mountpoint is not mounted: {mnt}".format(mnt=self.mnt))
 
         # umount
@@ -127,7 +139,12 @@
         finally:
             # cleanup
             log.debug("cleanup: %s", mount)
-            mount.close()
+
+            try :
+                mount.close()
+
+            except Exception as ex :
+                log.warning("cleanup: %s: %s", mount, ex)
 
     finally:
         if tmpdir :