[PATCH] Lock source spoke while depsolving (#867591)

Jesse Keating jkeating at redhat.com
Fri Oct 19 22:07:42 UTC 2012


This is a cheap fix, while a longer term effort to make this thread safe
can be explored.
---
 pyanaconda/ui/gui/spokes/software.py | 4 +++-
 pyanaconda/ui/gui/spokes/source.py   | 7 ++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
index 231e478..159c4c1 100644
--- a/pyanaconda/ui/gui/spokes/software.py
+++ b/pyanaconda/ui/gui/spokes/software.py
@@ -78,6 +78,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
                 self.payload.selectGroup(group)
 
         communication.send_not_ready(self.__class__.__name__)
+        communication.send_not_ready("SourceSpoke")
         threadMgr.add(AnacondaThread(name="AnaCheckSoftwareThread",
                                      target=self.checkSoftwareSelection))
 
@@ -97,6 +98,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
             self._tx_id = self.payload.txID
         finally:
             communication.send_ready(self.__class__.__name__)
+            communication.send_ready("SourceSpoke")
 
     @property
     def completed(self):
@@ -115,7 +117,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
     def ready(self):
         # By default, the software selection spoke is not ready.  We have to
         # wait until the installation source spoke is completed.  This could be
-        # becasue the user filled something out, or because we're done fetching
+        # because the user filled something out, or because we're done fetching
         # repo metadata from the mirror list, or we detected a DVD/CD.
         from pyanaconda.threads import threadMgr
         return (not threadMgr.get("AnaSoftwareWatcher") and
diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py
index 6fa7e8e..a88f6ce 100644
--- a/pyanaconda/ui/gui/spokes/source.py
+++ b/pyanaconda/ui/gui/spokes/source.py
@@ -549,10 +549,15 @@ class SourceSpoke(NormalSpoke):
         # By default, the source spoke is not ready.  We have to wait until
         # storageInitialize is done to know whether or not there's local
         # devices potentially holding install media.
-        return (self._ready and not threadMgr.get("AnaPayloadMDThread"))
+        log.info('source spoke ready: %s' % self._ready)
+        return (self._ready and not threadMgr.get("AnaPayloadMDThread") and
+                not threadMgr.get("AnaCheckSoftwareThread"))
 
     @property
     def status(self):
+        from pyanaconda.threads import threadMgr
+        if threadMgr.get("AnaCheckSoftwareThread"):
+            return _("Checking software dependencies...")
         if not self.ready:
             return _("Not ready")
         if self.data.method.method == "url":
-- 
1.7.11.4



More information about the anaconda-patches mailing list