##// END OF EJS Templates
hgweb: do not try to replace signal handlers while locking...
Yuya Nishihara -
r38158:5b831053 stable
parent child Browse files
Show More
@@ -225,6 +225,12 b' class hgweb(object):'
225 # resolve file patterns relative to repo root
225 # resolve file patterns relative to repo root
226 r.ui.setconfig('ui', 'forcecwd', r.root, 'hgweb')
226 r.ui.setconfig('ui', 'forcecwd', r.root, 'hgweb')
227 r.baseui.setconfig('ui', 'forcecwd', r.root, 'hgweb')
227 r.baseui.setconfig('ui', 'forcecwd', r.root, 'hgweb')
228 # it's unlikely that we can replace signal handlers in WSGI server,
229 # and mod_wsgi issues a big warning. a plain hgweb process (with no
230 # threading) could replace signal handlers, but we don't bother
231 # conditionally enabling it.
232 r.ui.setconfig('ui', 'signal-safe-lock', 'false', 'hgweb')
233 r.baseui.setconfig('ui', 'signal-safe-lock', 'false', 'hgweb')
228 # displaying bundling progress bar while serving feel wrong and may
234 # displaying bundling progress bar while serving feel wrong and may
229 # break some wsgi implementation.
235 # break some wsgi implementation.
230 r.ui.setconfig('progress', 'disable', 'true', 'hgweb')
236 r.ui.setconfig('progress', 'disable', 'true', 'hgweb')
@@ -841,13 +841,59 b' no style can be loaded from directories '
841
841
842 fall back to default
842 fall back to default
843
843
844 $ killdaemons.py
845
846 Test signal-safe-lock in web and non-web processes
847
848 $ cat <<'EOF' > disablesig.py
849 > import signal
850 > from mercurial import error, extensions
851 > def disabledsig(orig, signalnum, handler):
852 > if signalnum == signal.SIGTERM:
853 > raise error.Abort(b'SIGTERM cannot be replaced')
854 > try:
855 > return orig(signalnum, handler)
856 > except ValueError:
857 > raise error.Abort(b'signal.signal() called in thread?')
858 > def uisetup(ui):
859 > extensions.wrapfunction(signal, b'signal', disabledsig)
860 > EOF
861
862 by default, signal interrupt should be disabled while making a lock file
863
864 $ hg debuglock -s --config extensions.disablesig=disablesig.py
865 abort: SIGTERM cannot be replaced
866 [255]
867
868 but in hgweb, it isn't disabled since some WSGI servers complains about
869 unsupported signal.signal() calls (see issue5889)
870
871 $ hg serve --config extensions.disablesig=disablesig.py \
872 > --config web.allow-push='*' --config web.push_ssl=False \
873 > -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
874 $ cat hg.pid >> $DAEMON_PIDS
875
876 $ hg clone -q http://localhost:$HGPORT/ repo
877 $ hg bookmark -R repo foo
878
879 push would fail if signal.signal() were called
880
881 $ hg push -R repo -B foo
882 pushing to http://localhost:$HGPORT/
883 searching for changes
884 no changes found
885 exporting bookmark foo
886 [1]
887
888 $ rm -R repo
889 $ killdaemons.py
890
844 errors
891 errors
845
892
846 $ cat errors.log
893 $ cat errors.log
847
894
848 Uncaught exceptions result in a logged error and canned HTTP response
895 Uncaught exceptions result in a logged error and canned HTTP response
849
896
850 $ killdaemons.py
851 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
897 $ hg serve --config extensions.hgweberror=$TESTDIR/hgweberror.py -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
852 $ cat hg.pid >> $DAEMON_PIDS
898 $ cat hg.pid >> $DAEMON_PIDS
853
899
General Comments 0
You need to be logged in to leave comments. Login now