Commits

Robert Brewer committed a3d4e4f

silently disable signal handlers when running behind Apache (i.e. when "import _cprequest" is not done in the main thread).

Comments (0)

Files changed (1)

cherrypy/_cpengine.py

     return getattr(m, "__file__", None)
 
 
-if hasattr(signal, "SIGHUP"):
-    def SIGHUP(signum=None, frame=None):
-        cherrypy.engine.reexec()
-    signal.signal(signal.SIGHUP, SIGHUP)
+try:
+    if hasattr(signal, "SIGHUP"):
+        def SIGHUP(signum=None, frame=None):
+            cherrypy.engine.reexec()
+        signal.signal(signal.SIGHUP, SIGHUP)
 
-if hasattr(signal, "SIGTERM"):
-    def SIGTERM(signum=None, frame=None):
-        cherrypy.server.stop()
-        cherrypy.engine.stop()
-    signal.signal(signal.SIGTERM, SIGTERM)
-
+    if hasattr(signal, "SIGTERM"):
+        def SIGTERM(signum=None, frame=None):
+            cherrypy.server.stop()
+            cherrypy.engine.stop()
+        signal.signal(signal.SIGTERM, SIGTERM)
+except ValueError, _signal_exc:
+    if _signal_exc.args[0] != "signal only works in main thread":
+        raise
 
 class Engine(object):
     """The application engine, which exposes a request interface to (HTTP) servers."""