dynamic app optimizations

This commit is contained in:
roberto@mrspurr
2010-09-12 08:38:43 +02:00
parent c6e5e533fa
commit 5259c803e8
2 changed files with 16 additions and 8 deletions
+14 -2
View File
@@ -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);
+2 -6
View File
@@ -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);
}
}