summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-05-15 18:25:59 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-25 20:03:51 -0700
commitd858639445745b36b40dfbc33b4db2017abd8902 (patch)
tree4fa83d7da3467069ff0c8d9c75771d65c4b5b2cb /pym
parent0a3a7a54d05359f421c64a84b7c71b2968b3aba6 (diff)
downloadportage-d858639445745b36b40dfbc33b4db2017abd8902.tar.gz
portage-d858639445745b36b40dfbc33b4db2017abd8902.tar.bz2
portage-d858639445745b36b40dfbc33b4db2017abd8902.zip
preserve-libs: lock vardb for removeFromContents
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/vartree.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 8de794573..6ac161182 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1523,10 +1523,14 @@ class dblink(object):
unmerge_no_replacement)
if cpv_lib_map:
self._remove_preserved_libs(cpv_lib_map)
- for cpv, removed in cpv_lib_map.items():
- if not self.vartree.dbapi.cpv_exists(cpv):
- continue
- self.vartree.dbapi.removeFromContents(cpv, removed)
+ self.vartree.dbapi.lock()
+ try:
+ for cpv, removed in cpv_lib_map.items():
+ if not self.vartree.dbapi.cpv_exists(cpv):
+ continue
+ self.vartree.dbapi.removeFromContents(cpv, removed)
+ finally:
+ self.vartree.dbapi.unlock()
plib_registry.store()
finally:
@@ -3455,12 +3459,19 @@ class dblink(object):
# same cpv then the vdb entry no longer belongs
# to it, so we'll have to get the slot and counter
# from plib_registry._data instead.
+ self.vartree.dbapi.lock()
try:
- slot, counter = self.vartree.dbapi.aux_get(
- cpv, ["SLOT", "COUNTER"])
- has_vdb_entry = True
- except KeyError:
- pass
+ try:
+ slot, counter = self.vartree.dbapi.aux_get(
+ cpv, ["SLOT", "COUNTER"])
+ except KeyError:
+ pass
+ else:
+ has_vdb_entry = True
+ self.vartree.dbapi.removeFromContents(
+ cpv, paths)
+ finally:
+ self.vartree.dbapi.unlock()
if not has_vdb_entry:
# It's possible for previously unmerged packages
@@ -3484,8 +3495,6 @@ class dblink(object):
remaining = [f for f in plib_dict[cpv] if f not in paths]
plib_registry.register(cpv, slot, counter, remaining)
- if has_vdb_entry:
- self.vartree.dbapi.removeFromContents(cpv, paths)
plib_registry.store()
finally: