Since we add actions to main loop, not releasing lock may lead to deadlock.
<not-in-commit-msg> Until we have Martin's patches reworking threading, this is needed to handle exceptions from 'with gdk_threaded:' blocks. </not-in-commit-msg> --- pyanaconda/exception.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/pyanaconda/exception.py b/pyanaconda/exception.py index 871c056..4e369d8 100644 --- a/pyanaconda/exception.py +++ b/pyanaconda/exception.py @@ -69,7 +69,11 @@ class AnacondaExceptionHandler(ExceptionHandler): sys.exit(0) else: try: - from gi.repository import Gtk + from gi.repository import Gtk, Gdk + + # Release Gdk lock to prevent deadlocks in cases when + # exception appeared in gdk_threaded block + Gdk.threads_leave()
if Gtk.main_level() > 0: # main loop is running, don't crash it by running another one
diff --git a/pyanaconda/exception.py b/pyanaconda/exception.py index 871c056..4e369d8 100644 --- a/pyanaconda/exception.py +++ b/pyanaconda/exception.py @@ -69,7 +69,11 @@ class AnacondaExceptionHandler(ExceptionHandler): sys.exit(0) else: try:
from gi.repository import Gtk
from gi.repository import Gtk, Gdk
# Release Gdk lock to prevent deadlocks in cases when
# exception appeared in gdk_threaded block
Gdk.threads_leave() if Gtk.main_level() > 0: # main loop is running, don't crash it by running another one
Looks fine, for now.
- Chris
anaconda-patches@lists.fedorahosted.org