commit: 05c0b3d03393fe376f3ae4b49bce403d496e3e68 Author: Mike Frysinger <vapier <AT> chromium <DOT> org> AuthorDate: Tue Mar 29 07:12:25 2022 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Apr 13 15:34:30 2022 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=05c0b3d0
vartree: avoid lock contention when there are no blockers No sense in grabbing the vdb lock if we aren't going to do any work. This avoids contention on the global lock with parallel packages. [sam: cherry-picked from chromiumos' third_party/portage_tool repo] (cherry picked from commit ea5f6f8c0a5e05d7630f9070992a89fa6907cc14) Signed-off-by: Sam James <sam <AT> gentoo.org> Closes: https://github.com/gentoo/portage/pull/813 Signed-off-by: Sam James <sam <AT> gentoo.org> lib/portage/dbapi/vartree.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py index e7252790d..602913862 100644 --- a/lib/portage/dbapi/vartree.py +++ b/lib/portage/dbapi/vartree.py @@ -5148,14 +5148,17 @@ class dblink: self._clear_contents_cache() contents = self.getcontents() destroot_len = len(destroot) - 1 - self.lockdb() - try: - for blocker in blockers: - self.vartree.dbapi.removeFromContents( - blocker, iter(contents), relative_paths=False - ) - finally: - self.unlockdb() + + # Avoid lock contention if we aren't going to do any work. + if blockers: + self.lockdb() + try: + for blocker in blockers: + self.vartree.dbapi.removeFromContents( + blocker, iter(contents), relative_paths=False + ) + finally: + self.unlockdb() plib_registry = self.vartree.dbapi._plib_registry if plib_registry:
