From 521dacce2bc7037371e4a8958dc3a7ab3983a9bf Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 11 Oct 2006 05:54:12 +0000 Subject: Move PORTAGE_BUILDDIR in to a category subdirectory and clean up the category directory if empty (while holding lock). This this will help avoid PORTAGE_BUILDDIR collisions for parallel builds and will also hack around bug #150454. svn path=/main/trunk/; revision=4654 --- bin/emerge | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'bin') diff --git a/bin/emerge b/bin/emerge index f82448a4a..ee53b647e 100755 --- a/bin/emerge +++ b/bin/emerge @@ -2118,14 +2118,23 @@ class MergeTask(object): portage.doebuild_environment(y, "setup", myroot, pkgsettings, self.edebug, 1, portdb) - portage_util.ensure_dirs( - os.path.dirname(pkgsettings["PORTAGE_BUILDDIR"]), + catdir = os.path.dirname(pkgsettings["PORTAGE_BUILDDIR"]) + portage_util.ensure_dirs(os.path.dirname(catdir), uid=portage.portage_uid, gid=portage.portage_gid, mode=070, mask=0) builddir_lock = None + catdir_lock = None try: + catdir_lock = portage_locks.lockdir(catdir) + portage_util.ensure_dirs(catdir, + uid=portage.portage_uid, gid=portage.portage_gid, + mode=070, mask=0) builddir_lock = portage_locks.lockdir( pkgsettings["PORTAGE_BUILDDIR"]) + try: + portage_locks.unlockdir(catdir_lock) + finally: + catdir_lock = None msg = " === (%s of %s) Cleaning (%s::%s)" % \ (mergecount, len(mymergelist), pkg_key, y) short_msg = "emerge: (%s of %s) %s Clean" % \ @@ -2187,6 +2196,19 @@ class MergeTask(object): finally: if builddir_lock: portage_locks.unlockdir(builddir_lock) + try: + if not catdir_lock: + # Lock catdir for removal if empty. + catdir_lock = portage_locks.lockdir(catdir) + finally: + if catdir_lock: + try: + os.rmdir(catdir) + except OSError, e: + if e.errno != errno.ENOTEMPTY: + raise + del e + portage_locks.unlockdir(catdir_lock) elif x[0]=="binary": #merge the tbz2 -- cgit v1.2.3-1-g7c22