From 3b15149de1fd3eb7716732961e257467fbd6f200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renaud=20M=C3=A9trich?= Date: Mon, 22 Apr 2024 14:47:41 +0200 Subject: [PATCH] [pkg] Don't initialize _packages to empty set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When initializing _packages, a distinction must be made between not having any package and not being initialized at all. Otherwise, if a package manager returns no package, the query command will execute hundreds of times. This can reproduce with 'flatpak' on RHEL when no package is returned: # flatpak list --> no output # strace -fttTvyy -s 128 -e execve -o sos.strace -- ./bin/sos report [...] Press ENTER to continue, or CTRL-C to quit. ^C # grep -c ' execve("/usr/sbin/flatpak"' sos.strace 350 Signed-off-by: Renaud Métrich --- sos/policies/package_managers/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sos/policies/package_managers/__init__.py b/sos/policies/package_managers/__init__.py index 663c3132df..594ca82726 100644 --- a/sos/policies/package_managers/__init__.py +++ b/sos/policies/package_managers/__init__.py @@ -54,7 +54,7 @@ class PackageManager(): files = None def __init__(self, chroot=None, remote_exec=None): - self._packages = {} + self._packages = None self.files = [] self.remote_exec = remote_exec @@ -63,7 +63,7 @@ def __init__(self, chroot=None, remote_exec=None): @property def packages(self): - if not self._packages: + if self._packages is None: self._generate_pkg_list() return self._packages @@ -181,6 +181,9 @@ def _generate_pkg_list(self): 'pkg_manager': 'package manager name'}} """ + if self._packages is None: + self._packages = {} + if self.query_command: cmd = self.query_command pkg_list = self.exec_cmd(cmd, timeout=30, chroot=self.chroot) @@ -340,6 +343,9 @@ def all_files(self): return self.files def _generate_pkg_list(self): + if self._packages is None: + self._packages = {} + self._packages.update(self.primary.packages) for pm in self.fallbacks: _pkgs = pm.packages