From 22ba6cc406fbfb68ee5c7442b3beef2dd2cde040 Mon Sep 17 00:00:00 2001 From: Unbit Date: Fri, 24 May 2013 18:10:29 +0200 Subject: [PATCH] added uwsgi.lock/unlock to pypy and fixed --pypy-wsgi-file --- core/lock.c | 12 ++++++++++-- plugins/pypy/pypy_setup.py | 25 ++++++++++++++++++------- uwsgi.h | 4 ++-- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/lock.c b/core/lock.c index 7a806c5c..1edeb7eb 100644 --- a/core/lock.c +++ b/core/lock.c @@ -764,10 +764,18 @@ nextlock: } -void uwsgi_user_lock(int lock_num) { +int uwsgi_user_lock(int lock_num) { + if (lock_num < 0 || lock_num > uwsgi.locks) { + return -1; + } uwsgi_lock(uwsgi.user_lock[lock_num]); + return 0; } -void uwsgi_user_unlock(int lock_num) { +int uwsgi_user_unlock(int lock_num) { + if (lock_num < 0 || lock_num > uwsgi.locks) { + return -1; + } uwsgi_unlock(uwsgi.user_lock[lock_num]); + return 0; } diff --git a/plugins/pypy/pypy_setup.py b/plugins/pypy/pypy_setup.py index 08ea8610..ee73f6dd 100644 --- a/plugins/pypy/pypy_setup.py +++ b/plugins/pypy/pypy_setup.py @@ -5,6 +5,7 @@ sys.path.extend(os.environ.get('PYTHONPATH','').split(os.pathsep)) import imp import traceback + __name__ = '__main__' mainmodule = type(sys)('__main__') sys.modules['__main__'] = mainmodule @@ -55,6 +56,10 @@ int uwsgi_cache_magic_set(char *, uint64_t, char *, uint64_t, uint64_t, uint64_t int uwsgi_cache_magic_del(char *, uint64_t, char *); int uwsgi_add_timer(uint8_t, int); int uwsgi_add_file_monitor(uint8_t, char *); + +int uwsgi_user_lock(int); +int uwsgi_user_unlock(int); + ''' ffi = cffi.FFI() @@ -68,8 +73,10 @@ it sucks, i will fix it in the near future... """ wsgi_application = None + sys.argv.insert(0, ffi.string(lib.uwsgi_binary_path())) + """ load a wsgi module """ @@ -94,7 +101,7 @@ def uwsgi_pypy_file_loader(filename): global wsgi_application w = ffi.string(filename) c = 'application' - mod = imp.load_source('uwsgi_file_wsgi', filename) + mod = imp.load_source('uwsgi_file_wsgi', w) wsgi_application = getattr(mod, c) """ @@ -328,6 +335,16 @@ def uwsgi_pypy_uwsgi_add_file_monitor(signum, filename): raise Exception("unable to register file monitor") uwsgi.add_file_monitor = uwsgi_pypy_uwsgi_add_file_monitor +def uwsgi_pypy_lock(num): + if lib.uwsgi_user_lock(num) < 0: + raise Exception("invalid lock") +uwsgi.lock = uwsgi_pypy_lock + +def uwsgi_pypy_unlock(num): + if lib.uwsgi_user_unlock(num) < 0: + raise Exception("invalid lock") +uwsgi.unlock = uwsgi_pypy_unlock + """ populate uwsgi.opt """ @@ -350,9 +367,3 @@ for i in range(0, n_opts[0]): print "Initialized PyPy with Python", sys.version print "PyPy Home:", sys.prefix - -def pippo(): - foo = sys.exc_info() - print foo - -sys.__excepthook__ = pippo diff --git a/uwsgi.h b/uwsgi.h index 8b8458e7..e956ae6a 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -3796,8 +3796,8 @@ int uwsgi_plugin_modifier1(char *); void *cache_udp_server_loop(void *); -void uwsgi_user_lock(int); -void uwsgi_user_unlock(int); +int uwsgi_user_lock(int); +int uwsgi_user_unlock(int); void simple_loop_run_int(int);