diff options
author | Max Romanov <max.romanov@nginx.com> | 2017-12-27 14:02:11 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2017-12-27 14:02:11 +0300 |
commit | be36cf52c8b092ebb688784a1c10626cac2138d7 (patch) | |
tree | c7b725425e12be5d8aa04114c3436f78726b1db1 /src/nxt_python_wsgi.c | |
parent | cdfdbc43eb2f6c59bf1b1cf6d71a6afec34d7869 (diff) | |
download | unit-be36cf52c8b092ebb688784a1c10626cac2138d7.tar.gz unit-be36cf52c8b092ebb688784a1c10626cac2138d7.tar.bz2 |
Introducing application 'atexit' hook.
Finalizing Python interpreter.
This closes #65 issue on GitHub.
Diffstat (limited to 'src/nxt_python_wsgi.c')
-rw-r--r-- | src/nxt_python_wsgi.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/nxt_python_wsgi.c b/src/nxt_python_wsgi.c index 36cd8e14..0f56ea37 100644 --- a/src/nxt_python_wsgi.c +++ b/src/nxt_python_wsgi.c @@ -60,9 +60,9 @@ typedef struct { typedef struct nxt_python_run_ctx_s nxt_python_run_ctx_t; static nxt_int_t nxt_python_init(nxt_task_t *task, nxt_common_app_conf_t *conf); - static nxt_int_t nxt_python_run(nxt_task_t *task, nxt_app_rmsg_t *rmsg, nxt_app_wmsg_t *msg); +static void nxt_python_atexit(nxt_task_t *task); static PyObject *nxt_python_create_environ(nxt_task_t *task); static PyObject *nxt_python_get_environ(nxt_task_t *task, @@ -103,6 +103,7 @@ NXT_EXPORT nxt_application_module_t nxt_app_module = { nxt_string(PY_VERSION), nxt_python_init, nxt_python_run, + nxt_python_atexit, }; @@ -455,6 +456,21 @@ fail: } +static void +nxt_python_atexit(nxt_task_t *task) +{ + Py_DECREF(nxt_py_application); + Py_DECREF(nxt_py_start_resp_obj); + Py_DECREF(nxt_py_environ_ptyp); + + Py_Finalize(); + + if (nxt_py_home != NULL) { + nxt_free(nxt_py_home); + } +} + + static PyObject * nxt_python_create_environ(nxt_task_t *task) { |