Robert Brewer avatar Robert Brewer committed e7868db

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)

     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."""
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.