summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-09-06 20:07:30 +0000
committerZac Medico <zmedico@gentoo.org>2006-09-06 20:07:30 +0000
commit5c17359c4b91133ad44c037452cfea6df894021b (patch)
tree825c0887f7fa0d17042db4fe682e101738043601
parentacf30bf50b7260c2f004226fe9b0e3f0ea1f701c (diff)
downloadportage-5c17359c4b91133ad44c037452cfea6df894021b.tar.gz
portage-5c17359c4b91133ad44c037452cfea6df894021b.tar.bz2
portage-5c17359c4b91133ad44c037452cfea6df894021b.zip
Properly lock the critical section of portage.unmerge() for bug #101240.
svn path=/main/trunk/; revision=4417
-rw-r--r--pym/portage.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/pym/portage.py b/pym/portage.py
index ef6f32c9c..38a5755e3 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -3244,12 +3244,16 @@ def merge(mycat, mypkg, pkgloc, infloc, myroot, mysettings, myebuild=None,
def unmerge(cat, pkg, myroot, mysettings, mytrimworld=1, vartree=None, ldpath_mtimes=None):
mylink = dblink(
cat, pkg, myroot, mysettings, treetype="vartree", vartree=vartree)
- if mylink.exists():
- mylink.unmerge(trimworld=mytrimworld, cleanup=1,
- ldpath_mtimes=ldpath_mtimes)
- mylink.delete()
- return 0
- return 1
+ try:
+ mylink.lockdb()
+ if mylink.exists():
+ mylink.unmerge(trimworld=mytrimworld, cleanup=1,
+ ldpath_mtimes=ldpath_mtimes)
+ mylink.delete()
+ return 0
+ return 1
+ finally:
+ mylink.unlockdb()
def getCPFromCPV(mycpv):
"""Calls pkgsplit on a cpv and returns only the cp."""
@@ -5677,8 +5681,6 @@ class dblink:
global dircache
dircache={}
- self.lockdb()
-
self.settings.load_infodir(self.dbdir)
if not pkgfiles:
@@ -5843,7 +5845,7 @@ class dblink:
doebuild(myebuildpath, "cleanrm", self.myroot, self.settings,
tree="vartree", mydbapi=self.vartree.dbapi,
vartree=self.vartree)
- self.unlockdb()
+
env_update(target_root=self.myroot, prev_mtimes=ldpath_mtimes)
def isowner(self,filename,destroot):