For bug #141361, use an alarm signal to implement a 1 minute timeout for processing...
authorZac Medico <zmedico@gentoo.org>
Sat, 30 Dec 2006 21:02:43 +0000 (21:02 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 30 Dec 2006 21:02:43 +0000 (21:02 -0000)
svn path=/main/trunk/; revision=5430

pym/portage.py

index 06dcd2f8393eb155ce616368fc0d44fe93945eda..2942bb2573b1bef34f765c7c2f750172182db22a 100644 (file)
@@ -505,7 +505,16 @@ def elog_process(cpv, mysettings):
                        # TODO:  implement a common portage module loader
                        logmodule = __import__("elog_modules.mod_"+s)
                        m = getattr(logmodule, "mod_"+s)
+                       def timeout_handler(signum, frame):
+                               raise portage_exception.PortageException(
+                                       "Timeout in elog_process for system '%s'" % s)
+                       import signal
+                       signal.signal(signal.SIGALRM, timeout_handler)
+                       # Timeout after one minute (in case something like the mail
+                       # module gets hung).
+                       signal.alarm(60)
                        m.process(mysettings, cpv, mylogentries, fulllog)
+                       signal.alarm(0)
                        if hasattr(m, "finalize") and not m.finalize in _elog_atexit_handlers:
                                _elog_atexit_handlers.append(m.finalize)
                                atexit_register(m.finalize, mysettings)