diff options
author | Juro Bystricky <juro.bystricky@intel.com> | 2017-04-10 13:59:36 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-11 18:10:17 +0100 |
commit | 34db499e6bf1cd6cada582f43297085894211f75 (patch) | |
tree | ee7e7b26da24106b3500104827a35e90fdfe2839 /meta/lib | |
parent | a4cca6a1311874da880e25c69f353f3565f6da7d (diff) | |
download | poky-34db499e6bf1cd6cada582f43297085894211f75.tar.gz |
classutils.py: deterministic sorting
The method "prioritized" returns a list sorted by the value
of the "priority" field, in descending order. However, if several
list items have the same priority, the ordering of those items
within the priority-sorted list becomes random. As a consequence,
we may end up with a non-deterministic oe-terminal spawning, as several
terminals have the same priority. So running commands such as
$ bitbake xxx -cdevshell
$ bitbake yyy -cmenuconfig
may spawn a different terminal each time, for example sometimes Gnome
and sometimes Konsole as hey have the same priority.
Rather than modifying the priorities so they all differ, we sub-sort
the list based on (terminal) names.
This way we achieve a deterministic outcome.
[YOCTO#10938]
(From OE-Core rev: 82ae62f28dd2d5fb2fb261478ac6161315ac6c38)
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/classutils.py | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/meta/lib/oe/classutils.py b/meta/lib/oe/classutils.py index e7856c86f2..45cd5249be 100644 --- a/meta/lib/oe/classutils.py +++ b/meta/lib/oe/classutils.py | |||
@@ -36,7 +36,7 @@ abstract base classes out of the registry).""" | |||
36 | @classmethod | 36 | @classmethod |
37 | def prioritized(tcls): | 37 | def prioritized(tcls): |
38 | return sorted(list(tcls.registry.values()), | 38 | return sorted(list(tcls.registry.values()), |
39 | key=lambda v: v.priority, reverse=True) | 39 | key=lambda v: (v.priority, v.name), reverse=True) |
40 | 40 | ||
41 | def unregister(cls): | 41 | def unregister(cls): |
42 | for key in cls.registry.keys(): | 42 | for key in cls.registry.keys(): |