diff options
author | Valentin Bartenev <vbart@nginx.com> | 2018-03-15 17:10:24 +0300 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2018-03-15 17:10:24 +0300 |
commit | cf2767625fa164b813ef489795e9eebc11536475 (patch) | |
tree | 88e2df9d6cc055101a3e199f221a4de7b72f4825 | |
parent | 6da1207d952ec903d09bc793cb18f1f3834e6d1b (diff) | |
download | unit-cf2767625fa164b813ef489795e9eebc11536475.tar.gz unit-cf2767625fa164b813ef489795e9eebc11536475.tar.bz2 |
Python: fixed crash if start_response() is called inside iteration.
The start_response() uses nxt_python_run_ctx, but it was unset right
after the application call.
-rw-r--r-- | src/nxt_python_wsgi.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/nxt_python_wsgi.c b/src/nxt_python_wsgi.c index 15947fa0..d2eb5d5b 100644 --- a/src/nxt_python_wsgi.c +++ b/src/nxt_python_wsgi.c @@ -353,19 +353,17 @@ nxt_python_run(nxt_task_t *task, nxt_app_rmsg_t *rmsg, nxt_app_wmsg_t *wmsg) return NXT_ERROR; } - nxt_python_run_ctx = &run_ctx; - PyTuple_SET_ITEM(args, 0, environ); Py_INCREF(nxt_py_start_resp_obj); PyTuple_SET_ITEM(args, 1, nxt_py_start_resp_obj); + nxt_python_run_ctx = &run_ctx; + result = PyObject_CallObject(nxt_py_application, args); Py_DECREF(args); - nxt_python_run_ctx = NULL; - if (nxt_slow_path(result == NULL)) { nxt_log_error(NXT_LOG_ERR, task->log, "Python failed to call the application"); @@ -428,6 +426,7 @@ nxt_python_run(nxt_task_t *task, nxt_app_rmsg_t *rmsg, nxt_app_wmsg_t *wmsg) } Py_DECREF(result); + nxt_python_run_ctx = NULL; return NXT_OK; @@ -446,6 +445,7 @@ fail: } Py_DECREF(result); + nxt_python_run_ctx = NULL; return NXT_ERROR; } |