diff --git a/plugins/psgi/psgi_plugin.c b/plugins/psgi/psgi_plugin.c index 1a2836f9..e241135f 100644 --- a/plugins/psgi/psgi_plugin.c +++ b/plugins/psgi/psgi_plugin.c @@ -670,6 +670,9 @@ void uwsgi_perl_after_request(struct wsgi_request *wsgi_req) { // Before we call exit(0) we'll run the // uwsgi_perl_atexit() hook which'll properly tear // down the interpreter. + + // mark the request as ended (otherwise the atexit hook will be skipped) + uwsgi.workers[uwsgi.mywid].cores[wsgi_req->async_id].in_request = 0; goodbye_cruel_world(); } diff --git a/plugins/pypy/pypy_plugin.c b/plugins/pypy/pypy_plugin.c index a14dddab..98164e61 100644 --- a/plugins/pypy/pypy_plugin.c +++ b/plugins/pypy/pypy_plugin.c @@ -66,17 +66,34 @@ static int uwsgi_pypy_init() { } else { if (upypy.home) { + // first try with /bin way: #ifdef __CYGWIN__ - char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.dll"); + char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.dll"); #elif defined(__APPLE__) - char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.dylib"); + char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.dylib"); #else - char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.so"); + char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.so"); #endif if (uwsgi_file_exists(libpath)) { - upypy.handler = dlopen(libpath, RTLD_NOW | RTLD_GLOBAL); + upypy.handler = dlopen(libpath, RTLD_NOW | RTLD_GLOBAL); + } + free(libpath); + + // fallback to old-style way + if (!upypy.handler) { + +#ifdef __CYGWIN__ + char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.dll"); +#elif defined(__APPLE__) + char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.dylib"); +#else + char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.so"); +#endif + if (uwsgi_file_exists(libpath)) { + upypy.handler = dlopen(libpath, RTLD_NOW | RTLD_GLOBAL); + } + free(libpath); } - free(libpath); } // fallback to standard library search path if (!upypy.handler) {