Use AlarmSignal for timout handling in mod_mail_summary.finalize().
authorZac Medico <zmedico@gentoo.org>
Sat, 4 Sep 2010 01:19:16 +0000 (18:19 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 4 Sep 2010 01:19:16 +0000 (18:19 -0700)
pym/portage/elog/mod_mail_summary.py

index e739a7a7a2c81e0e90d08929c36ba3625e3a91d8..2961447366978608fbb40a6e164dc9495a58966f 100644 (file)
@@ -3,7 +3,7 @@
 # Distributed under the terms of the GNU General Public License v2
 
 import portage
-from portage.exception import PortageException
+from portage.exception import AlarmSignal
 from portage.localization import _
 from portage.util import writemsg
 from portage import os
@@ -57,19 +57,15 @@ def _finalize(mysettings, items):
        mymessage = portage.mail.create_message(myfrom, myrecipient, mysubject,
                mybody, attachments=list(items.values()))
 
-       def timeout_handler(signum, frame):
-               raise PortageException("Timeout in finalize() for elog system 'mail_summary'")
-       import signal
-       signal.signal(signal.SIGALRM, timeout_handler)
        # Timeout after one minute in case send_mail() blocks indefinitely.
-       signal.alarm(60)
-
        try:
                try:
+                       AlarmSignal.register(60)
                        portage.mail.send_mail(mysettings, mymessage)
                finally:
-                       signal.alarm(0)
-       except PortageException as e:
-               writemsg("%s\n" % str(e), noiselevel=-1)
+                       AlarmSignal.unregister()
+       except AlarmSignal:
+               writemsg("Timeout in finalize() for elog system 'mail_summary'\n",
+                       noiselevel=-1)
 
        return