Handle unpickle EOFError.
authorZac Medico <zmedico@gentoo.org>
Sat, 3 Sep 2011 19:04:58 +0000 (12:04 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 3 Sep 2011 19:04:58 +0000 (12:04 -0700)
pym/_emerge/BlockerCache.py
pym/portage/dbapi/vartree.py
pym/portage/getbinpkg.py
pym/portage/util/_dyn_libs/PreservedLibsRegistry.py
pym/portage/util/mtimedb.py

index 8a1c884784a0043420941664c0b171e2df98d2e8..0076828233585f315968bf0ece82c217ee9749d2 100644 (file)
@@ -59,7 +59,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                        self._cache_data = mypickle.load()
                        f.close()
                        del f
-               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+               except (AttributeError, EOFError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
                        if isinstance(e, EnvironmentError) and \
                                getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
                                pass
index 4df0576a4d07f07696e1243753d3aefaa7f1b242..3a6d99f026193923eb54caa041570c9a7f12b24f 100644 (file)
@@ -555,7 +555,7 @@ class vardbapi(dbapi):
                        aux_cache = mypickle.load()
                        f.close()
                        del f
-               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+               except (AttributeError, EOFError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
                        if isinstance(e, EnvironmentError) and \
                                getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
                                pass
index a83e2a51cc20f76328d707cb606219bd3fcd6572..3e5867223b52952b4c5d94f67a631b940e31bd2f 100644 (file)
@@ -542,7 +542,7 @@ def dir_get_metadata(baseurl, conn=None, chunk_size=3000, verbose=1, usingcache=
                out.write(_("Loaded metadata pickle.\n"))
                out.flush()
                metadatafile.close()
-       except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError):
+       except (AttributeError, EOFError, EnvironmentError, ValueError, pickle.UnpicklingError):
                metadata = {}
        if baseurl not in metadata:
                metadata[baseurl]={}
index a1814981d6da7d28029f11fa358da764cf71dead..510c390af9a3f56aa9309adfd8d868be1c6be781 100644 (file)
@@ -59,12 +59,18 @@ class PreservedLibsRegistry(object):
                try:
                        f = open(_unicode_encode(self._filename,
                                        encoding=_encodings['fs'], errors='strict'), 'rb')
-                       self._data = pickle.load(f)
-               except (AttributeError, ValueError, pickle.UnpicklingError) as e:
+                       if os.fstat(f.fileno()).st_size == 0:
+                               # ignore empty lock file
+                               pass
+                       else:
+                               self._data = pickle.load(f)
+               except (AttributeError, EOFError, ValueError, pickle.UnpicklingError) as e:
                        writemsg_level(_("!!! Error loading '%s': %s\n") % \
                                (self._filename, e), level=logging.ERROR, noiselevel=-1)
-               except (EOFError, IOError) as e:
-                       if isinstance(e, EOFError) or e.errno == errno.ENOENT:
+               except EnvironmentError as e:
+                       if not hasattr(e, 'errno'):
+                               raise
+                       elif e.errno == errno.ENOENT:
                                pass
                        elif e.errno == PermissionDenied.errno:
                                raise PermissionDenied(self._filename)
index bc4f97c53f2b83f575d2af5aa03630e3e48cc267..8079aa9ea6bd615a43ed9df16c51f7de73efd65d 100644 (file)
@@ -34,7 +34,7 @@ class MtimeDB(dict):
                        d = mypickle.load()
                        f.close()
                        del f
-               except (AttributeError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
+               except (AttributeError, EOFError, EnvironmentError, ValueError, pickle.UnpicklingError) as e:
                        if isinstance(e, EnvironmentError) and \
                                getattr(e, 'errno', None) in (errno.ENOENT, errno.EACCES):
                                pass