On 11/20/2014 04:02 PM, Chris Lumens wrote:
This is an attempt to solve this problem (condensed):
DEBUG anaconda: _autoContinue clicking continue button
DEBUG anaconda: Left hub: SummaryHub
DEBUG anaconda: Entered hub: ProgressHub
INFO anaconda: Running Thread: AnaInstallThread (139961321248512)
DEBUG anaconda: spoke is ready: <pyanaconda.ui.gui.spokes.source.SourceSpoke
object at 0x7f4b5c6fcc10>
DEBUG anaconda: _autoContinue clicking continue button
INFO program: Running... systemctl --no-wall poweroff
Basically, for whatever reason the source spoke is saying it's ready twice
and the second message gets processed after we've moved to the progress
hub. Each time this message gets processed, we find there's nothing else
to wait on and we should click the continue button. Unfortunately, the
second time we click the continue button, there are no more actions so
anaconda thinks it's time to shut down.
This is probably because the software spoke also says that the source
spoke is ready, since the software spoke will lock and unlock source
during dependency checks. I guess something needs to be unravelled in
that dependency, but this fix seems like a good idea.
So, just check if the spoke that sent the message is even displayed on
the hub that is currently shown. If not, throw the message away.
Since this problem is hard to expose (it's only happened to me during live
image building a couple of times), I can't really test if this fixes it.
However, I don't see how it can do more harm except perhaps to the custom
part spoke. But I don't think there either.
---
pyanaconda/ui/gui/hubs/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyanaconda/ui/gui/hubs/__init__.py b/pyanaconda/ui/gui/hubs/__init__.py
index 98b5e3f..4dc5c9d 100644
--- a/pyanaconda/ui/gui/hubs/__init__.py
+++ b/pyanaconda/ui/gui/hubs/__init__.py
@@ -260,7 +260,7 @@ class Hub(GUIObject, common.Hub):
# The first argument to all codes is the name of the spoke we are
# acting on. If no such spoke exists, throw the message away.
spoke = self._spokes.get(args[0], None)
- if not spoke:
+ if not spoke or spoke.name not in self._spokes:
q.task_done()
continue