Index: pym/_emerge/__init__.py =================================================================== --- pym/_emerge/__init__.py (revision 12370) +++ pym/_emerge/__init__.py (working copy) @@ -2677,8 +2677,12 @@ be released when merge() is called. """ - if self._default_exit(packager) == os.EX_OK and \ - self.opts.buildpkgonly: + if self._default_exit(packager) != os.EX_OK: + self._unlock_builddir() + self.wait() + return + + if self.opts.buildpkgonly: # Need to call "clean" phase for buildpkgonly mode portage.elog.elog_process(self.pkg.cpv, self.settings) phase = "clean" @@ -2689,9 +2693,10 @@ self._start_task(clean_phase, self._clean_exit) return - if self._final_exit(packager) != os.EX_OK or \ - self.opts.buildpkgonly: - self._unlock_builddir() + # Continue holding the builddir lock until + # after the package has been installed. + self._current_task = None + self.returncode = packager.returncode self.wait() def _clean_exit(self, clean_phase):