diff options
author | Joshua Lock <josh@linux.intel.com> | 2011-08-05 16:12:12 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-08-09 15:19:59 +0100 |
commit | 138178f5d2e39065629f51abd577bd607ca570d0 (patch) | |
tree | d2caa1e4e75b6af3a31b75b47a48aab12a58540c /bitbake | |
parent | ecab5d610b2921ab50524aaf5b1ebc78d22dc0c0 (diff) | |
download | poky-138178f5d2e39065629f51abd577bd607ca570d0.tar.gz |
bb/ui/crumbs/tasklistmodel: prevent hang when removing item
It's possible to trigger an infinite recursion when removing a package
where many of the dependencies share their dependencies. Prevent this by
keeping a list of removed item names and only removing the item when it's
not in the list.
Addresses [YOCTO #1319]
(Bitbake rev: 0ed58f28e869cceeefa930a3f1f46c5f3e9ffe21)
Signed-off-by: Joshua Lock <josh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/ui/crumbs/tasklistmodel.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py index 8fb56837ea..3e097579fa 100644 --- a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py +++ b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py | |||
@@ -315,6 +315,7 @@ class TaskListModel(gtk.ListStore): | |||
315 | """ | 315 | """ |
316 | def mark(self, opath): | 316 | def mark(self, opath): |
317 | usersel = {} | 317 | usersel = {} |
318 | removed = [] | ||
318 | it = self.get_iter_first() | 319 | it = self.get_iter_first() |
319 | name = self[opath][self.COL_NAME] | 320 | name = self[opath][self.COL_NAME] |
320 | 321 | ||
@@ -343,8 +344,9 @@ class TaskListModel(gtk.ListStore): | |||
343 | usersel[iname] = self[path][self.COL_IMG] | 344 | usersel[iname] = self[path][self.COL_IMG] |
344 | 345 | ||
345 | # FIXME: need to ensure partial name matching doesn't happen | 346 | # FIXME: need to ensure partial name matching doesn't happen |
346 | if inc and deps.count(name): | 347 | if inc and deps.count(name) and name not in removed: |
347 | # found a dependency, remove it | 348 | # found a dependency, remove it |
349 | removed.append(name) | ||
348 | self.mark(path) | 350 | self.mark(path) |
349 | 351 | ||
350 | if inc and binb.count(name): | 352 | if inc and binb.count(name): |