[PATCH] Run exception handling in the main thread also in TUI
Vratislav Podzimek
vpodzime at redhat.com
Mon Mar 4 13:54:29 UTC 2013
On Thu, 2013-02-21 at 08:01 -0500, Chris Lumens wrote:
> > 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
> python docs:
>
> Thread identifiers may be recycled when a thread exits and another
> thread is created. The identifier is available even after the thread
> has exited.
>
> 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.
Yeah I don't like it much too, but I guess for the main thread it should
be okay.
>
> > - 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
> (http://docs.python.org/2/library/collections.html#collections.namedtuple)
> might be just the thing to use.
That's a neat idea! I'll change this also in python-meh and send patches
for both. The anacoda part can be then squashed with this patch.
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list