diff --git a/uwsgi.c b/uwsgi.c index 7b7b1539..3758abcc 100644 --- a/uwsgi.c +++ b/uwsgi.c @@ -1776,6 +1776,9 @@ int main(int argc, char *argv[], char *envp[]) { } #endif + // re-initialize wsgi_req (can be full of init_uwsgi_app data) + memset(uwsgi.wsgi_requests, 0, sizeof(struct wsgi_request) * uwsgi.async); + while (uwsgi.workers[uwsgi.mywid].manage_next_request) { @@ -2068,6 +2071,17 @@ int init_uwsgi_app(PyObject * force_wsgi_dict, PyObject * my_callable) { if (uwsgi.wsgi_config == NULL) { if (uwsgi.wsgi_req->wsgi_script_len > 0) { + uwsgi.wsgi_req->wsgi_callable = strchr(uwsgi.wsgi_req->wsgi_script, ':'); + if (uwsgi.wsgi_req->wsgi_callable) { + uwsgi.wsgi_req->wsgi_callable[0] = 0; + uwsgi.wsgi_req->wsgi_callable++; + uwsgi.wsgi_req->wsgi_callable_len = uwsgi.wsgi_req->wsgi_script_len - strlen(uwsgi.wsgi_req->wsgi_script) - 1; + uwsgi.wsgi_req->wsgi_script_len = strlen(uwsgi.wsgi_req->wsgi_script); + } + else { + uwsgi.wsgi_req->wsgi_callable = "application"; + uwsgi.wsgi_req->wsgi_callable_len = 11; + } memcpy(tmpstring, uwsgi.wsgi_req->wsgi_script, uwsgi.wsgi_req->wsgi_script_len); wsgi_module = PyImport_ImportModule(tmpstring); if (!wsgi_module) { @@ -2078,8 +2092,6 @@ int init_uwsgi_app(PyObject * force_wsgi_dict, PyObject * my_callable) { } return -1; } - uwsgi.wsgi_req->wsgi_callable = "application"; - uwsgi.wsgi_req->wsgi_callable_len = 11; } else { memcpy(tmpstring, uwsgi.wsgi_req->wsgi_module, uwsgi.wsgi_req->wsgi_module_len); diff --git a/wsgi_handlers.c b/wsgi_handlers.c index 0805f530..28c8a53f 100644 --- a/wsgi_handlers.c +++ b/wsgi_handlers.c @@ -155,15 +155,11 @@ int uwsgi_request_wsgi(struct uwsgi_server *uwsgi, struct wsgi_request *wsgi_req if (PyDict_Contains(uwsgi->py_apps, zero)) { wsgi_req->app_id = PyInt_AsLong(PyDict_GetItem(uwsgi->py_apps, zero)); } - else { + else if (wsgi_req->script_name_len > 1 || uwsgi->default_app < 0) { /* unavailable app for this SCRIPT_NAME */ wsgi_req->app_id = -1; if (wsgi_req->wsgi_script_len > 0 || (wsgi_req->wsgi_callable_len > 0 && wsgi_req->wsgi_module_len > 0)) { - if ((wsgi_req->app_id = init_uwsgi_app(NULL, NULL)) == -1) { - internal_server_error(wsgi_req->poll.fd, "wsgi application not found"); - Py_DECREF(zero); - goto clear2; - } + wsgi_req->app_id = init_uwsgi_app(NULL, NULL); } }