subtree updates

meta-raspberrypi: 31c33d155c..cfbb192e5c:
  Andrei Gherzan (1):
        docs: Add information for RTC devices

  Andrew Penner (2):
        rpi-cmdline: Add ability to specify CPUs to add to the isolcpus list
        extra-build-config: Add documentation for the ISOLATED_CPUS configuration variable

  Jan Vermaete (1):
        docs: untabify the few tabs in the file

  Khem Raj (3):
        userland: Update to latest as of 20220323
        picamera-libs: Adjust sourcedir
        omxplayer: Use internal version of ffmpeg

meta-openembedded: af11f6ce73..b9e440ead8:
  Adrian Freihofer (1):
        srecord: build fix

  Andreas Müller (40):
        octave: upgrade 4.4.1 -> 6.4.0 and overhaul recipe
        mousepad: upgrade 0.5.8 -> 0.5.9
        xfce4-terminal: upgrade 0.8.10 -> 1.0.0
        orage: upgrade 4.12.1 -> 4.16.0
        orage: enable notify PACKAGECONFIG by default
        ristretto: upgrade 0.12.1 -> 0.12.2
        xarchiver: upgrade 0.5.4.14 -> 0.5.4.17
        xfce4-cpufreq-plugin: upgrade 1.2.5 -> 1.2.7
        xfce4-cpugraph-plugin: upgrade 1.2.5 -> 1.2.6
        xfce4-diskperf-plugin: upgrade 2.6.3 -> 2.7.0
        xfce4-notifyd: upgrade 0.6.2 -> 0.6.3
        xfce4-screenshooter: upgrade 1.9.9 -> 1.9.10
        xfce4-sensors-plugin: upgrade 1.4.2 -> 1.4.3
        Allow several components notification
        meta-xfce: Add Andreas Müller back to maintainers list
        accountsservice: upgrade 0.6.55 -> 22.08.8
        colord-gtk: upgrade 0.2.0 -> 0.3.0
        evince: upgrade 41.4 -> 42.1
        evolution-data-server: upgrade 3.43.1 -> 3.44.0
        file-roller: upgrade 3.40.0 -> 3.42.0
        gdm: upgrade 41.0 -> 42.0
        gedit: upgrade 41.0 -> 42.0
        gfbgraph: upgrade 0.2.4 -> 0.2.5
        gnome-calculator upgrade 41.1 -> 42-0
        libgweather4: initial add 4.0.0
        gnome-calendar 41.2 -> 42.0
        gnome-desktop: upgrade 41.2 -> 42.0
        libnma: upgrade 1.8.34 -> 1.8.36
        gnome-bluetooth4: initial add 42.0
        gnome-font-viewer: upgrade 41.0 -> 42.0
        yelp-xsl: upgrade 41.1 -> 42.0
        yelp-tools: upgrade 41.0 -> 42.0
        yelp: upgrade 41.2 -> 42.1
        upower: upgrade 0.99.13 -> 0.99.17 / build with mesom
        upower: fix location of udev-rules with sysvinit
        gnome-commander: initial add 1.14.2
        gnome-text-editor: initial add 42.0
        evolution-data-server: re-enable gobject-introspection
        jack: upgrade 1.19.19 -> 1.19.20
        fluidsynth: upgrade 2.2.4 -> 2.2.6

  Chen Qi (1):
        blueman: fix python site-packages installation issue

  Craig McQueen (1):
        dnsmasq: Fix a typo in initscript

  Davide Gardenal (2):
        python3-wxgtk4: add distro feature check to match dependency
        fwupd: add COMPATIBLE_HOST to match dependency

  Jose Quaresma (2):
        srt: 1.4.2 -> 1.4.3
        srt: 1.4.3 -> 1.4.4

  Khem Raj (2):
        xfce4-screenshooter: Add dependency on libxml-parser-perl-native
        open-vm-tools: Use specific BSD-2-Clause for license

  Matsunaga-Shinji (2):
        samba: add 2 cves to allowlist
        libzip: add CVE-2017-12858 to allowlist

  Minjae Kim (1):
        multipath-tools: update SRC_URI

  Potin Lai (1):
        libimobiledevice-glue: update recipe

  Robert Yang (2):
        wxwidgets: Fix checking for PACKAGECONFIG and DISTRO_FEATURES
        wxwidgets: git -> gitsm to fix build when no x11

  Samuli Piippo (1):
        python3-qface: upgrade 2.0.6 -> 2.0.7

  Xu Huan (5):
        python3-cheetah: upgrade 3.2.6.post2 -> 3.2.6
        python3-evdev: upgrade 1.4.0 -> 1.5.0
        python3-google-api-python-client: upgrade 2.36.0 -> 2.42.0
        python3-itsdangerous: upgrade 2.1.1 -> 2.1.2
        python3-grpcio: upgrade 1.44.0 -> 1.45.0

  Yi Zhao (1):
        dracut: upgrade 055 -> 056

  wangmy (20):
        python3-bitarray: upgrade 2.4.0 -> 2.4.1
        python3-click: upgrade 8.0.4 -> 8.1.2
        python3-cppy: upgrade 1.2.0 -> 1.2.1
        python3-pandas: upgrade 1.4.1 -> 1.4.2
        python3-protobuf: upgrade 3.19.4 -> 3.20.0
        python3-pychromecast: upgrade 10.3.0 -> 11.0.0
        python3-pyparted: upgrade 3.11.7 -> 3.12.0
        python3-redis: upgrade 4.2.0 -> 4.2.1
        python3-sqlalchemy: upgrade 1.4.32 -> 1.4.34
        python3-thrift: upgrade 0.15.0 -> 0.16.0
        python3-trafaret: upgrade 2.1.0 -> 2.1.1
        python3-twine: upgrade 3.8.0 -> 4.0.0
        python3-tzlocal: upgrade 4.1 -> 4.2
        python3-websocket-client: upgrade 1.3.1 -> 1.3.2
        python3-werkzeug: upgrade 2.0.3 -> 2.1.1
        zenity: upgrade 3.41.0 -> 3.42.0
        ceres-solver: upgrade 2.0.0 -> 2.1.0
        grpc: upgrade 1.45.0 -> 1.45.1
        poppler: upgrade 22.03.0 -> 22.04.0
        xorg-sgml-doctools: upgrade 1.11 -> 1.12

  zhengrq.fnst (2):
        python3-jdatetime: upgrade 4.0.0 -> 4.1.0
        python3-kiwisolver: upgrade 1.4.0 -> 1.4.2

meta-security: da93339112..498ca39cd6:
  Armin Kuster (5):
        openscap-daemon: use renamaed python_setuptools_build_meta
        python3-fail2ban: fix compile issue on some hosts
        lkrg-module: covert to git fetcher
        linux-yocto_security.inc: add lkrg kfrags
        samhain: update to 4.4.7

  Ashish Sharma (1):
        meta-security : Use SPDX style licensing format

  Davide Gardenal (2):
        clamav: add COMPATIBLE_HOST to fix build error
        fscrypt: update dependecy from go-dep-native to go-native

  Robert Yang (1):
        LICENSE: adopt SPDX standard names

poky: 1976521190..ed98f1a1ae:
  Abongwa Amahnui Bonalais (1):
        oe-init-build-env: add quotes around variables to prevent word splitting

  Alessio Igor Bogani (1):
        kernel.bbclass: Use KERNEL_IMAGEDEST instead of hardcoded boot path

  Alexandre Belloni (1):
        pseudo: Fix handling of absolute links

  Bruce Ashfield (6):
        linux-yocto/5.15: update to v5.15.32
        linux-yocto/5.10: update to v5.10.109
        linux-yocto/5.15: aufs: fixes and optimization
        linux-yocto-rt/5.15: aufs: compile fix
        linux-yocto/5.15: features/security: Move x86_64 configs to separate file
        linux-yocto/5.10: features/security: Move x86_64 configs to separate file

  Carlos Rafael Giani (1):
        libsdl2: Disable libunwind dependency in native builds

  Claudius Heine (1):
        os-release: add os-release-initrd package

  Ferry Toth (1):
        package_manager: sign DEB package feeds

  Joe Slater (1):
        unzip: fix CVE-2021-4217

  Khem Raj (1):
        glib-2.0: Backport patches C++ variant of g_atomic_int_compare_and_exchange()

  Oleksandr Kravchuk (1):
        tzdata: update to 2022a

  Peter Kjellerstedt (5):
        python3-jinja2: Correct HOMEPAGE
        insane.bbclass: Make do_qa_patch() depend on if patch-fuzz is in ERROR_QA
        insane.bbclass: Make changes to QA_EMPTY_DIRS trigger package_qa to rerun
        bitbake.conf: Remove ERROR_QA from BB_HASHEXCLUDE_COMMON
        bitbake: knotty.py: Show elapsed time also for tasks with progress bars

  Richard Purdie (11):
        bitbake: parse: Ensure any existing siggen is closed down first
        bitbake: data: Ensure vardepsexclude or BB_BASEHASH_IGNORE_VARS covers contains items
        bitbake: server/process: Disable gc around critical section
        bitbake: cooker: Reset and rebuild inotify watches
        bitbake: pyinotify: Handle potential latent bug
        mirrors: Switch glibc and binutils to use shallow mirror tarballs
        bitbake: data: Fix accidentally added parameter
        bitbake.conf: Drop unexports from a different era
        vim: Upgrade 8.2.4524 -> 8.2.4681
        Revert "meta: rust: Bug fix for target definitions returning 'NoneType'"
        build-appliance-image: Update to master head revision

  Robert Yang (1):
        waffle: The surfaceless-egl and gbm requires opengl

  Saul Wold (5):
        busybox: Exclude .debug from depmod
        kmod: Add an exclude directive to depmod
        depmodwrapper: Use nonarch_base_libdir for depmod.d
        kmod: Update exclude patch to Accepted
        depmodwrapper-cross: Fix missing $

  Sean Anderson (1):
        u-boot: Fix condition for install_spl_helper

  Simone Weiss (1):
        popt: add ptest

  Sundeep KOKKONDA (3):
        gcc: sanitizer: Fix tsan against glibc 2.34
        meta: rust: Bug fix for target definitions returning 'NoneType'
        meta: scripts - relocation script adapted to support big-endian machines

  Xavier Berger (1):
        gpg-sign: Add parameters to gpg signature function

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I294af706d7b96796ff360b402b9d011082cf36a7
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index df4acca..08593d1 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -169,27 +169,15 @@
         bb.debug(1, "BBCooker starting %s" % time.time())
         sys.stdout.flush()
 
-        self.configwatcher = pyinotify.WatchManager()
-        bb.debug(1, "BBCooker pyinotify1 %s" % time.time())
-        sys.stdout.flush()
+        self.configwatcher = None
+        self.confignotifier = None
 
-        self.configwatcher.bbseen = set()
-        self.configwatcher.bbwatchedfiles = set()
-        self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications)
-        bb.debug(1, "BBCooker pyinotify2 %s" % time.time())
-        sys.stdout.flush()
         self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \
                          pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \
                          pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO
-        self.watcher = pyinotify.WatchManager()
-        bb.debug(1, "BBCooker pyinotify3 %s" % time.time())
-        sys.stdout.flush()
-        self.watcher.bbseen = set()
-        self.watcher.bbwatchedfiles = set()
-        self.notifier = pyinotify.Notifier(self.watcher, self.notifications)
 
-        bb.debug(1, "BBCooker pyinotify complete %s" % time.time())
-        sys.stdout.flush()
+        self.watcher = None
+        self.notifier = None
 
         # If being called by something like tinfoil, we need to clean cached data
         # which may now be invalid
@@ -240,9 +228,29 @@
             sys.stdout.flush()
             self.handlePRServ()
 
+    def setupConfigWatcher(self):
+        if self.configwatcher:
+            self.configwatcher.close()
+            self.confignotifier = None
+            self.configwatcher = None
+        self.configwatcher = pyinotify.WatchManager()
+        self.configwatcher.bbseen = set()
+        self.configwatcher.bbwatchedfiles = set()
+        self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications)
+
+    def setupParserWatcher(self):
+        if self.watcher:
+            self.watcher.close()
+            self.notifier = None
+            self.watcher = None
+        self.watcher = pyinotify.WatchManager()
+        self.watcher.bbseen = set()
+        self.watcher.bbwatchedfiles = set()
+        self.notifier = pyinotify.Notifier(self.watcher, self.notifications)
+
     def process_inotify_updates(self):
         for n in [self.confignotifier, self.notifier]:
-            if n.check_events(timeout=0):
+            if n and n.check_events(timeout=0):
                 # read notified events and enqeue them
                 n.read_events()
                 n.process_events()
@@ -262,10 +270,6 @@
                     self.configwatcher.bbseen.remove(event.pathname)
                 # Could remove all entries starting with the directory but for now...
                 bb.parse.clear_cache()
-            if "IN_CREATE" in event.maskname:
-                self.add_filewatch([[event.pathname]], watcher=self.configwatcher, dirs=True)
-            elif "IN_DELETE" in event.maskname and event.pathname in self.configwatcher.bbseen:
-                self.configwatcher.bbseen.remove(event.pathname)
         if not event.pathname in self.inotify_modified_files:
             self.inotify_modified_files.append(event.pathname)
         self.baseconfig_valid = False
@@ -285,10 +289,6 @@
                     self.watcher.bbseen.remove(event.pathname)
                 # Could remove all entries starting with the directory but for now...
                 bb.parse.clear_cache()
-            if "IN_CREATE" in event.maskname:
-                self.add_filewatch([[event.pathname]], dirs=True)
-            elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
-                self.watcher.bbseen.remove(event.pathname)
         if not event.pathname in self.inotify_modified_files:
             self.inotify_modified_files.append(event.pathname)
         self.parsecache_valid = False
@@ -358,6 +358,8 @@
             if mod not in self.orig_sysmodules:
                 del sys.modules[mod]
 
+        self.setupConfigWatcher()
+
         # Need to preserve BB_CONSOLELOG over resets
         consolelog = None
         if hasattr(self, "data"):
@@ -1639,6 +1641,8 @@
             self.updateCacheSync()
 
         if self.state != state.parsing and not self.parsecache_valid:
+            self.setupParserWatcher()
+
             bb.parse.siggen.reset(self.data)
             self.parseConfiguration ()
             if CookerFeatures.SEND_SANITYEVENTS in self.featureset:
diff --git a/poky/bitbake/lib/bb/data.py b/poky/bitbake/lib/bb/data.py
index 5d02bab..62ec214 100644
--- a/poky/bitbake/lib/bb/data.py
+++ b/poky/bitbake/lib/bb/data.py
@@ -272,7 +272,7 @@
     """Performs final steps upon the datastore, including application of overrides"""
     d.finalize(parent = True)
 
-def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
+def build_dependencies(key, keys, shelldeps, varflagsexcl, ignored_vars, d):
     deps = set()
     try:
         if key[-1] == ']':
@@ -283,12 +283,15 @@
             return deps, value
         varflags = d.getVarFlags(key, ["vardeps", "vardepvalue", "vardepsexclude", "exports", "postfuncs", "prefuncs", "lineno", "filename"]) or {}
         vardeps = varflags.get("vardeps")
+        exclusions = varflags.get("vardepsexclude", "").split()
 
-        def handle_contains(value, contains, d):
+        def handle_contains(value, contains, exclusions, d):
             newvalue = []
             if value:
                 newvalue.append(str(value))
             for k in sorted(contains):
+                if k in exclusions or k in ignored_vars:
+                    continue
                 l = (d.getVar(k) or "").split()
                 for item in sorted(contains[k]):
                     for word in item.split():
@@ -316,7 +319,7 @@
                 parser.parse_python(value, filename=varflags.get("filename"), lineno=varflags.get("lineno"))
                 deps = deps | parser.references
                 deps = deps | (keys & parser.execs)
-                value = handle_contains(value, parser.contains, d)
+                value = handle_contains(value, parser.contains, exclusions, d)
             else:
                 value, parsedvar = d.getVarFlag(key, "_content", False, retparser=True)
                 parser = bb.codeparser.ShellParser(key, logger)
@@ -324,7 +327,7 @@
                 deps = deps | shelldeps
                 deps = deps | parsedvar.references
                 deps = deps | (keys & parser.execs) | (keys & parsedvar.execs)
-                value = handle_contains(value, parsedvar.contains, d)
+                value = handle_contains(value, parsedvar.contains, exclusions, d)
                 if hasattr(parsedvar, "removes"):
                     value = handle_remove(value, deps, parsedvar.removes, d)
             if vardeps is None:
@@ -339,7 +342,7 @@
             value, parser = d.getVarFlag(key, "_content", False, retparser=True)
             deps |= parser.references
             deps = deps | (keys & parser.execs)
-            value = handle_contains(value, parser.contains, d)
+            value = handle_contains(value, parser.contains, exclusions, d)
             if hasattr(parser, "removes"):
                 value = handle_remove(value, deps, parser.removes, d)
 
@@ -359,7 +362,7 @@
                 deps |= set(varfdeps)
 
         deps |= set((vardeps or "").split())
-        deps -= set(varflags.get("vardepsexclude", "").split())
+        deps -= set(exclusions)
     except bb.parse.SkipRecipe:
         raise
     except Exception as e:
@@ -380,7 +383,7 @@
 
     tasklist = d.getVar('__BBTASKS', False) or []
     for task in tasklist:
-        deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, d)
+        deps[task], values[task] = build_dependencies(task, keys, shelldeps, varflagsexcl, ignored_vars, d)
         newdeps = deps[task]
         seen = set()
         while newdeps:
@@ -389,7 +392,7 @@
             newdeps = set()
             for dep in nextdeps:
                 if dep not in deps:
-                    deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, d)
+                    deps[dep], values[dep] = build_dependencies(dep, keys, shelldeps, varflagsexcl, ignored_vars, d)
                 newdeps |=  deps[dep]
             newdeps -= seen
         #print "For %s: %s" % (task, str(deps[task]))
diff --git a/poky/bitbake/lib/bb/parse/__init__.py b/poky/bitbake/lib/bb/parse/__init__.py
index c01807b..3476095 100644
--- a/poky/bitbake/lib/bb/parse/__init__.py
+++ b/poky/bitbake/lib/bb/parse/__init__.py
@@ -113,6 +113,8 @@
             return h['init'](data)
 
 def init_parser(d):
+    if hasattr(bb.parse, "siggen"):
+        bb.parse.siggen.exit()
     bb.parse.siggen = bb.siggen.init(d)
 
 def resolve_file(fn, d):
diff --git a/poky/bitbake/lib/bb/server/process.py b/poky/bitbake/lib/bb/server/process.py
index ce53fdc..19ef839 100644
--- a/poky/bitbake/lib/bb/server/process.py
+++ b/poky/bitbake/lib/bb/server/process.py
@@ -28,6 +28,7 @@
 import datetime
 import pickle
 import traceback
+import gc
 import bb.server.xmlrpcserver
 from bb import daemonize
 from multiprocessing import queues
@@ -739,8 +740,10 @@
         self.event = self
 
     def _send(self, obj):
+        gc.disable()
         with self.wlock:
             self.writer.send_bytes(obj)
+        gc.enable()
 
     def send(self, obj):
         obj = multiprocessing.reduction.ForkingPickler.dumps(obj)
diff --git a/poky/bitbake/lib/bb/tests/codeparser.py b/poky/bitbake/lib/bb/tests/codeparser.py
index f485204..71ed382 100644
--- a/poky/bitbake/lib/bb/tests/codeparser.py
+++ b/poky/bitbake/lib/bb/tests/codeparser.py
@@ -318,7 +318,7 @@
             "filename": "example.bb",
         })
 
-        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
+        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
 
         self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"]))
 
@@ -365,7 +365,7 @@
         self.d.setVarFlags("FOO", {"func": True})
         self.setEmptyVars(execs)
 
-        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
+        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
 
         self.assertEqual(deps, set(["somevar", "inverted"] + execs))
 
@@ -375,7 +375,7 @@
         self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
         self.d.setVarFlag("FOO", "vardeps", "oe_libinstall")
 
-        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
+        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
 
         self.assertEqual(deps, set(["oe_libinstall"]))
 
@@ -384,7 +384,7 @@
         self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
         self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}")
 
-        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d)
+        deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), self.d)
 
         self.assertEqual(deps, set(["oe_libinstall"]))
 
@@ -399,7 +399,7 @@
         # Check dependencies
         self.d.setVar('ANOTHERVAR', expr)
         self.d.setVar('TESTVAR', 'anothervalue testval testval2')
-        deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), self.d)
+        deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), self.d)
         self.assertEqual(sorted(values.splitlines()),
                          sorted([expr,
                           'TESTVAR{anothervalue} = Set',
@@ -412,6 +412,24 @@
         # Check final value
         self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone'])
 
+    def test_contains_vardeps_excluded(self):
+        # Check the ignored_vars option to build_dependencies is handled by contains functionality
+        varval = '${TESTVAR2} ${@bb.utils.filter("TESTVAR", "somevalue anothervalue", d)}'
+        self.d.setVar('ANOTHERVAR', varval)
+        self.d.setVar('TESTVAR', 'anothervalue testval testval2')
+        self.d.setVar('TESTVAR2', 'testval3')
+        deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(["TESTVAR"]), self.d)
+        self.assertEqual(sorted(values.splitlines()), sorted([varval]))
+        self.assertEqual(deps, set(["TESTVAR2"]))
+        self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
+
+        # Check the vardepsexclude flag is handled by contains functionality
+        self.d.setVarFlag('ANOTHERVAR', 'vardepsexclude', 'TESTVAR')
+        deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), self.d)
+        self.assertEqual(sorted(values.splitlines()), sorted([varval]))
+        self.assertEqual(deps, set(["TESTVAR2"]))
+        self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
+
     #Currently no wildcard support
     #def test_vardeps_wildcards(self):
     #    self.d.setVar("oe_libinstall", "echo test")
diff --git a/poky/bitbake/lib/bb/ui/knotty.py b/poky/bitbake/lib/bb/ui/knotty.py
index b2e7520..3f410fd 100644
--- a/poky/bitbake/lib/bb/ui/knotty.py
+++ b/poky/bitbake/lib/bb/ui/knotty.py
@@ -252,26 +252,26 @@
             return
         tasks = []
         for t in runningpids:
+            start_time = activetasks[t].get("starttime", None)
+            if start_time:
+                msg = "%s - %s (pid %s)" % (activetasks[t]["title"], self.elapsed(currenttime - start_time), activetasks[t]["pid"])
+            else:
+                msg = "%s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"])
             progress = activetasks[t].get("progress", None)
             if progress is not None:
                 pbar = activetasks[t].get("progressbar", None)
                 rate = activetasks[t].get("rate", None)
-                start_time = activetasks[t].get("starttime", None)
                 if not pbar or pbar.bouncing != (progress < 0):
                     if progress < 0:
-                        pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.BouncingSlider(), ''], extrapos=3, resize_handler=self.sigwinch_handle)
+                        pbar = BBProgress("0: %s" % msg, 100, widgets=[' ', progressbar.BouncingSlider(), ''], extrapos=3, resize_handler=self.sigwinch_handle)
                         pbar.bouncing = True
                     else:
-                        pbar = BBProgress("0: %s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]), 100, widgets=[' ', progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=5, resize_handler=self.sigwinch_handle)
+                        pbar = BBProgress("0: %s" % msg, 100, widgets=[' ', progressbar.Percentage(), ' ', progressbar.Bar(), ''], extrapos=5, resize_handler=self.sigwinch_handle)
                         pbar.bouncing = False
                     activetasks[t]["progressbar"] = pbar
-                tasks.append((pbar, progress, rate, start_time))
+                tasks.append((pbar, msg, progress, rate, start_time))
             else:
-                start_time = activetasks[t].get("starttime", None)
-                if start_time:
-                    tasks.append("%s - %s (pid %s)" % (activetasks[t]["title"], self.elapsed(currenttime - start_time), activetasks[t]["pid"]))
-                else:
-                    tasks.append("%s (pid %s)" % (activetasks[t]["title"], activetasks[t]["pid"]))
+                tasks.append(msg)
 
         if self.main.shutdown:
             content = pluralise("Waiting for %s running task to finish",
@@ -308,12 +308,12 @@
         if not self.quiet:
             for tasknum, task in enumerate(tasks[:(self.rows - 1 - lines)]):
                 if isinstance(task, tuple):
-                    pbar, progress, rate, start_time = task
+                    pbar, msg, progress, rate, start_time = task
                     if not pbar.start_time:
                         pbar.start(False)
                         if start_time:
                             pbar.start_time = start_time
-                    pbar.setmessage('%s:%s' % (tasknum, pbar.msg.split(':', 1)[1]))
+                    pbar.setmessage('%s: %s' % (tasknum, msg))
                     pbar.setextra(rate)
                     if progress > -1:
                         content = pbar.update(progress)