# HG changeset patch # User Ludovic Chabant # Date 1423018290 28800 # Node ID 4f00bb99400ece5f44723abdafae0f97f36c6444 # Parent 7decf00eee4786ce2a5bd5aa50d0d2368e8ecd98 serve: Fix exiting the server with `CTRL+C` when the SSE response is running. diff -r 7decf00eee47 -r 4f00bb99400e piecrust/commands/builtin/serving.py --- a/piecrust/commands/builtin/serving.py Tue Feb 03 18:50:58 2015 -0800 +++ b/piecrust/commands/builtin/serving.py Tue Feb 03 18:51:30 2015 -0800 @@ -1,5 +1,5 @@ import logging -from piecrust.serving import Server +from piecrust.serving import Server, _sse_abort from piecrust.commands.base import ChefCommand @@ -48,10 +48,13 @@ if ctx.args.wsgi == 'werkzeug': from werkzeug.serving import run_simple - run_simple(host, port, app, - threaded=True, - use_debugger=debug, - use_reloader=ctx.args.use_reloader) + try: + run_simple(host, port, app, + threaded=True, + use_debugger=debug, + use_reloader=ctx.args.use_reloader) + finally: + _sse_abort.set() elif ctx.args.wsgi == 'gunicorn': from gunicorn.app.base import BaseApplication diff -r 7decf00eee47 -r 4f00bb99400e piecrust/serving.py --- a/piecrust/serving.py Tue Feb 03 18:50:58 2015 -0800 +++ b/piecrust/serving.py Tue Feb 03 18:51:30 2015 -0800 @@ -26,6 +26,9 @@ logger = logging.getLogger(__name__) +_sse_abort = threading.Event() + + class ServingEnvironment(StandardEnvironment): pass @@ -446,6 +449,9 @@ yield bytes(outstr, 'utf8') break + if _sse_abort.is_set(): + break + try: logger.debug("Polling pipeline status queue...") count += 1