[PATCH] Run exception handling in the main thread also in TUI
clumens at redhat.com
Thu Feb 21 13:01:44 UTC 2013
> diff --git a/anaconda b/anaconda
> index 0e0fdba..0eb90c4 100755
> --- a/anaconda
> +++ b/anaconda
> @@ -31,6 +31,7 @@
> # This toplevel file is a little messy at the moment...
> import atexit, sys, os, re, time, subprocess
> +import threading
> from tempfile import mkstemp
> # keep up with process ID of the window manager if we start it
> wm_pid = None
> @@ -963,9 +964,10 @@ if __name__ == "__main__":
> # sets yum's multilib_policy to "all" (as opposed to "best")
> ksdata.packages.multiLib = opts.multiLib
> + cur_thread_id = threading.current_thread().ident
> from pyanaconda import exception
> # comment out the next line to make exceptions non-fatal
> - anaconda.mehConfig = exception.initExceptionHandling(anaconda)
> + anaconda.mehConfig = exception.initExceptionHandling(anaconda, cur_thread_id)
> # add our own additional signal handlers
> signal.signal(signal.SIGUSR1, lambda signum, frame:
Relying on thread ID kind of concerns me, given the following from the
Thread identifiers may be recycled when a thread exits and another
thread is created. The identifier is available even after the thread
However in this one case (the main thread), I think we can get away with
it. This was one reason why I added the ThreadManager object, to be
able to reference via name instead of ID.
> - def handleException(self, (ty, value, tb), obj):
> + def run_handleException(self, args_tuple):
> + """
> + Helper method with one argument only so that it can be registered
> + with GLib.idle_add() to run on idle or called from a handler.
> - def run_handleException_on_idle(args_tuple):
> - """
> - Helper function with one argument only so that it can be registered
> - with GLib.idle_add() to run on idle.
> + @param args_tuple: ((ty, value, tb), obj)
> - @param args_tuple: ((ty, value, tb), obj)
> + """
We've now got so much shipping around of (ty, val, tb) and then
sometimes obj that I wonder if we should just go ahead and pack them up
into something more handy. A NamedTuple
might be just the thing to use.
More information about the anaconda-patches