summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-08-05 16:12:12 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-08-09 15:19:59 +0100
commit138178f5d2e39065629f51abd577bd607ca570d0 (patch)
treed2caa1e4e75b6af3a31b75b47a48aab12a58540c /bitbake/lib
parentecab5d610b2921ab50524aaf5b1ebc78d22dc0c0 (diff)
downloadpoky-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/lib')
-rw-r--r--bitbake/lib/bb/ui/crumbs/tasklistmodel.py4
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):