changeset 145:527a4ea8ee93

FIX: Remove patch files specific for pypy3 plugin: they are moved to the files/extra location into the pypy3 plugin port
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 25 Sep 2022 19:13:33 +0200
parents 80fc69a2ce1f
children 34be2756e5f8
files uwsginl/files/patch-plugins_pypy_pypy__plugin.c uwsginl/files/patch-plugins_pypy_pypy__setup.py
diffstat 2 files changed, 0 insertions(+), 429 deletions(-) [+]
line wrap: on
line diff
--- a/uwsginl/files/patch-plugins_pypy_pypy__plugin.c	Sun Sep 25 19:08:34 2022 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
---- plugins/pypy/pypy_plugin.c.orig	2022-09-21 14:46:45 UTC
-+++ plugins/pypy/pypy_plugin.c
-@@ -42,9 +42,10 @@ void (*uwsgi_pypy_hook_paste_loader)(char *);
- void (*uwsgi_pypy_hook_pythonpath)(char *);
- void (*uwsgi_pypy_hook_request)(void *, int);
- void (*uwsgi_pypy_post_fork_hook)(void);
-+void (*uwsgi_pypy_hook_atexit)(void);
- 
- extern struct uwsgi_server uwsgi;
--struct uwsgi_plugin pypy_plugin;
-+struct uwsgi_plugin pypy3_plugin;
- 
- static int uwsgi_pypy_init() {
- 
-@@ -68,26 +69,26 @@ static int uwsgi_pypy_init() {
- 		if (upypy.home) {
- 			// first try with /bin way:
- #ifdef __CYGWIN__
--                        char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.dll");
-+			char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy3-c.so");
- #elif defined(__APPLE__)
--                        char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.dylib");
-+			char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy3-c.so");
- #else
--                        char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy-c.so");
-+			char *libpath = uwsgi_concat2(upypy.home, "/bin/libpypy3-c.so");
- #endif
- 			if (uwsgi_file_exists(libpath)) {
--                                upypy.handler = dlopen(libpath, RTLD_NOW | RTLD_GLOBAL);
--                        }
--                        free(libpath);
-+				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");
-+				char *libpath = uwsgi_concat2(upypy.home, "/libpypy3-c.so");
- #elif defined(__APPLE__)
--                        	char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.dylib");
-+				char *libpath = uwsgi_concat2(upypy.home, "/libpypy3-c.dylib");
- #else
--                        	char *libpath = uwsgi_concat2(upypy.home, "/libpypy-c.so");
-+				char *libpath = uwsgi_concat2(upypy.home, "/libpypy3-c.so");
- #endif
- 				if (uwsgi_file_exists(libpath)) {
- 					upypy.handler = dlopen(libpath, RTLD_NOW | RTLD_GLOBAL);
-@@ -98,11 +99,11 @@ static int uwsgi_pypy_init() {
- 		// fallback to standard library search path
- 		if (!upypy.handler) {
- #ifdef __CYGWIN__
--			upypy.handler = dlopen("libpypy-c.dll", RTLD_NOW | RTLD_GLOBAL);
-+			upypy.handler = dlopen("libpypy3-c.dll", RTLD_NOW | RTLD_GLOBAL);
- #elif defined(__APPLE__)
--			upypy.handler = dlopen("libpypy-c.dylib", RTLD_NOW | RTLD_GLOBAL);
-+			upypy.handler = dlopen("libpypy3-c.dylib", RTLD_NOW | RTLD_GLOBAL);
- #else
--			upypy.handler = dlopen("libpypy-c.so", RTLD_NOW | RTLD_GLOBAL);
-+			upypy.handler = dlopen("libpypy3-c.so", RTLD_NOW | RTLD_GLOBAL);
- #endif
- 		}
- 	}
-@@ -125,9 +126,9 @@ static int uwsgi_pypy_init() {
- 	}
- 
- 	u_pypy_init_threads = dlsym(upypy.handler, "pypy_init_threads");
--        if (!u_pypy_init_threads) {
--                uwsgi_log("!!! WARNING your libpypy-c does not export pypy_init_threads, multithreading will not work !!!\n");
--        }
-+	if (!u_pypy_init_threads) {
-+		uwsgi_log("!!! WARNING your libpypy-c does not export pypy_init_threads, multithreading will not work !!!\n");
-+	}
- 	
- 	u_rpython_startup_code();
- 
-@@ -148,9 +149,9 @@ static int uwsgi_pypy_init() {
- 				goto ready;
- 			}
- 		}
--                uwsgi_log("unable to set pypy home to \"%s\"\n", upypy.home);
-+		uwsgi_log("unable to set pypy home to \"%s\"\n", upypy.home);
- 		exit(1);
--        }
-+	}
- 
- ready:
- 	u_pypy_execute_source = dlsym(upypy.handler, "pypy_execute_source");
-@@ -160,9 +161,9 @@ ready:
- 	}
- 
- 	u_pypy_thread_attach = dlsym(upypy.handler, "pypy_thread_attach");
--        if (!u_pypy_thread_attach) {
--                uwsgi_log("!!! WARNING your libpypy-c does not export pypy_thread_attach, multithreading will not work !!!\n");
--        }
-+	if (!u_pypy_thread_attach) {
-+		uwsgi_log("!!! WARNING your libpypy-c does not export pypy_thread_attach, multithreading will not work !!!\n");
-+	}
- 
- 	if (upypy.setup) {
- 		buffer = uwsgi_open_and_read(upypy.setup, &rlen, 1, NULL);
-@@ -233,14 +234,14 @@ static void uwsgi_pypy_preinit_apps() {
- 
- static int uwsgi_pypy_request(struct wsgi_request *wsgi_req) {
- 	/* Standard WSGI request */
--        if (!wsgi_req->len) {
--                uwsgi_log( "Empty pypy request. skip.\n");
--                return -1;
--        }
-+	if (!wsgi_req->len) {
-+		uwsgi_log( "Empty pypy request. skip.\n");
-+		return -1;
-+	}
- 
--        if (uwsgi_parse_vars(wsgi_req)) {
--                return -1;
--        }
-+	if (uwsgi_parse_vars(wsgi_req)) {
-+		return -1;
-+	}
- 
- 	if (uwsgi_pypy_hook_request) {
- 		uwsgi_pypy_hook_request(wsgi_req, wsgi_req->async_id);
-@@ -266,16 +267,20 @@ static void uwsgi_pypy_init_apps() {
- 	}
- }
- 
--/*
-+
- static void uwsgi_pypy_atexit() {
--	if (pypy_debug_file)
--		fflush(pypy_debug_file);
-+	/* NOTE: this function is NOT called when "skip-atexit = true" is configured */
-+	if (!uwsgi_pypy_hook_atexit) {
-+		uwsgi_log("!!! Your pypy setup does not define a uwsgi_pypy_atexit !!!\n");	       
-+		return;
-+	}	     
-+	uwsgi_pypy_hook_atexit();
- }
--*/
- 
-+
- static void uwsgi_opt_pypy_ini_paste(char *opt, char *value, void *foobar) {
--        uwsgi_opt_load_ini(opt, value, NULL);
--        upypy.paste = value;
-+	uwsgi_opt_load_ini(opt, value, NULL);
-+	upypy.paste = value;
- }
- 
- 
-@@ -332,14 +337,14 @@ static void uwsgi_pypy_post_fork() {
- 	pthread_mutex_init(&upypy.attach_thread_lock, NULL);
- 	struct uwsgi_string_list *usl = NULL;
- 	uwsgi_foreach(usl, upypy.eval_post_fork) {
--                uwsgi_pypy_hook_execute_source(usl->value);
--        }
-+		uwsgi_pypy_hook_execute_source(usl->value);
-+	}
- 	uwsgi_foreach(usl, upypy.exec_post_fork) {
--                size_t rlen = 0;
--                char *buffer = uwsgi_open_and_read(usl->value, &rlen, 1, NULL);
--                uwsgi_pypy_hook_execute_source(buffer);
--                free(buffer);
--        }
-+		size_t rlen = 0;
-+		char *buffer = uwsgi_open_and_read(usl->value, &rlen, 1, NULL);
-+		uwsgi_pypy_hook_execute_source(buffer);
-+		free(buffer);
-+	}
- 
- 	if (uwsgi_pypy_post_fork_hook) {
- 		uwsgi_pypy_post_fork_hook();
-@@ -360,20 +365,20 @@ static int uwsgi_pypy_mule(char *opt) {
- 		exit(1);
- 	}
- 
--        if (uwsgi_endswith(opt, ".py")) {
--                size_t rlen = 0;
--                char *buffer = uwsgi_open_and_read(opt, &rlen, 1, NULL);
--                uwsgi_pypy_hook_execute_source(buffer);
-+	if (uwsgi_endswith(opt, ".py")) {
-+		size_t rlen = 0;
-+		char *buffer = uwsgi_open_and_read(opt, &rlen, 1, NULL);
-+		uwsgi_pypy_hook_execute_source(buffer);
- 		free(buffer);
--                return 1;
--        }
--        return 0;
-+		return 1;
-+	}
-+	return 0;
- 
- }
- 
- 
--struct uwsgi_plugin pypy_plugin = {
--	.name = "pypy",
-+struct uwsgi_plugin pypy3_plugin = {
-+	.name = "pypy3",
- 	.modifier1 = 0,
- 	.on_load = uwsgi_pypy_onload,
- 	.init = uwsgi_pypy_init,
-@@ -388,4 +393,6 @@ struct uwsgi_plugin pypy_plugin = {
- 	.rpc = uwsgi_pypy_rpc,
- 	.post_fork = uwsgi_pypy_post_fork,
- 	.mule = uwsgi_pypy_mule,
-+
-+	.atexit = uwsgi_pypy_atexit,
- };
--- a/uwsginl/files/patch-plugins_pypy_pypy__setup.py	Sun Sep 25 19:08:34 2022 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
---- plugins/pypy/pypy_setup.py.orig	2022-09-21 14:46:45 UTC
-+++ plugins/pypy/pypy_setup.py
-@@ -31,8 +31,15 @@ extern void (*uwsgi_pypy_hook_paste_loader)(char *);
- extern void (*uwsgi_pypy_hook_pythonpath)(char *);
- extern void (*uwsgi_pypy_hook_request)(struct wsgi_request *);
- extern void (*uwsgi_pypy_post_fork_hook)(void);
-+extern void (*uwsgi_pypy_hook_atexit)(void);
- '''
- 
-+
-+# Convert a byte string to a native string using the default encoding
-+def n(b):
-+    return b.decode()
-+
-+
- # here we load CFLAGS and uwsgi.h from the binary
- defines0 = '''
- char *uwsgi_get_cflags();
-@@ -46,7 +53,7 @@ lib0 = ffi.verify(defines0)
- # basically it build a list of #define from binary CFLAGS
- uwsgi_cdef = []
- uwsgi_defines = []
--uwsgi_cflags = ffi.string(lib0.uwsgi_get_cflags()).split()
-+uwsgi_cflags = n(ffi.string(lib0.uwsgi_get_cflags())).split()
- for cflag in uwsgi_cflags:
-     if cflag.startswith('-D'):
-         line = cflag[2:]
-@@ -57,8 +64,14 @@ for cflag in uwsgi_cflags:
-         else:
-             uwsgi_cdef.append('#define %s ...' % line)
-             uwsgi_defines.append('#define %s 1' % line)
--uwsgi_dot_h = ffi.string(lib0.uwsgi_get_dot_h())
-+uwsgi_dot_h = n(ffi.string(lib0.uwsgi_get_dot_h()))
- 
-+#
-+# Replace #include <pcre.h> on FreeBSD because it is found on a non-standard
-+# location for cffi.
-+#
-+uwsgi_dot_h = uwsgi_dot_h.replace('#include <pcre.h>', '#include "/usr/local/include/pcre.h"')
-+
- # uwsgi definitions
- cdefines = '''
- %s
-@@ -110,6 +123,8 @@ struct uwsgi_worker {
-         uint64_t running_time;
-         uint64_t avg_response_time;
-         uint64_t tx;
-+
-+        int hijacked;
-         ...;
- };
- 
-@@ -164,11 +179,14 @@ struct uwsgi_server {
-         struct wsgi_request *wsgi_req;
- 
-         struct uwsgi_plugin *p[];
-+
-+        int skip_atexit_teardown;
-+
-         ...;
- };
- struct uwsgi_server uwsgi;
- 
--struct uwsgi_plugin pypy_plugin;
-+struct uwsgi_plugin pypy3_plugin;
- 
- const char *uwsgi_pypy_version;
- 
-@@ -269,7 +287,7 @@ const char *uwsgi_pypy_version = UWSGI_VERSION;
- %s
- 
- extern struct uwsgi_server uwsgi;
--extern struct uwsgi_plugin pypy_plugin;
-+extern struct uwsgi_plugin pypy3_plugin;
- %s
- ''' % ('\n'.join(uwsgi_defines), uwsgi_dot_h, hooks)
- 
-@@ -286,7 +304,7 @@ wsgi_application = None
- 
- # fix argv if needed
- if len(sys.argv) == 0:
--    sys.argv.insert(0, ffi.string(lib.uwsgi_binary_path()))
-+    sys.argv.insert(0, n(ffi.string(lib.uwsgi_binary_path())))
- 
- 
- @ffi.callback("void(char *)")
-@@ -305,7 +323,7 @@ def uwsgi_pypy_loader(module):
-     load a wsgi module
-     """
-     global wsgi_application
--    m = ffi.string(module)
-+    m = n(ffi.string(module))
-     c = 'application'
-     if ':' in m:
-         m, c = m.split(':')
-@@ -322,7 +340,7 @@ def uwsgi_pypy_file_loader(filename):
-     load a mod_wsgi compliant .wsgi file
-     """
-     global wsgi_application
--    w = ffi.string(filename)
-+    w = n(ffi.string(filename))
-     c = 'application'
-     mod = imp.load_source('uwsgi_file_wsgi', w)
-     wsgi_application = getattr(mod, c)
-@@ -334,7 +352,7 @@ def uwsgi_pypy_paste_loader(config):
-     load a .ini paste app
-     """
-     global wsgi_application
--    c = ffi.string(config)
-+    c = n(ffi.string(config))
-     if c.startswith('config:'):
-         c = c[7:]
-     if c[0] != '/':
-@@ -358,12 +376,47 @@ def uwsgi_pypy_post_fork_hook():
-         uwsgi.post_fork_hook()
- 
- 
-+@ffi.callback("void()")
-+def uwsgi_pypy_atexit():
-+    """
-+    .atexit handler implementation
-+
-+    Modelled after python_plugin.c
-+    """
-+    mywid = lib.uwsgi.mywid
-+    if mywid > 0:
-+        # if hijacked do not run atexit hooks
-+        if lib.uwsgi.workers[mywid].hijacked:
-+            return
-+        # if busy do not run atexit hooks
-+        if lib.uwsgi_worker_is_busy(mywid):
-+            return
-+        # managing atexit in async mode is a real pain...skip it for now
-+        if lib.uwsgi.async > 0:
-+            return
-+
-+    import uwsgi
-+    uahandler = getattr(uwsgi, "atexit", None)
-+    if callable(uahandler):
-+        uahandler()
-+
-+    if lib.uwsgi.skip_atexit_teardown:
-+        return
-+
-+    import atexit
-+    aefn = getattr(atexit, "_run_exitfuncs", None)
-+    if callable(aefn):
-+        aefn()
-+    else:
-+        print("!!! atexit._run_exitfuncs() not found !!!")
-+
-+
- @ffi.callback("void(char *)")
- def uwsgi_pypy_pythonpath(item):
-     """
-     add an item to the pythonpath
-     """
--    path = ffi.string(item)
-+    path = n(ffi.string(item))
-     sys.path.append(path)
-     print("added %s to pythonpath" % path)
- 
-@@ -470,15 +523,17 @@ def uwsgi_pypy_wsgi_handler(wsgi_req):
-     def start_response(status, headers, exc_info=None):
-         if exc_info:
-             traceback.print_exception(*exc_info)
-+        status = status.encode("latin1")
-         lib.uwsgi_response_prepare_headers(wsgi_req, ffi.new("char[]", status), len(status))
-         for hh in headers:
-+            hh = (hh[0].encode("latin1"), hh[1].encode("latin1"))
-             lib.uwsgi_response_add_header(wsgi_req, ffi.new("char[]", hh[0]), len(hh[0]), ffi.new("char[]", hh[1]), len(hh[1]))
-         return writer
- 
-     environ = {}
-     iov = wsgi_req.hvec
-     for i in range(0, wsgi_req.var_cnt, 2):
--        environ[ffi.string(ffi.cast("char*", iov[i].iov_base), iov[i].iov_len)] = ffi.string(ffi.cast("char*", iov[i+1].iov_base), iov[i+1].iov_len)
-+        environ[ffi.string(ffi.cast("char*", iov[i].iov_base), iov[i].iov_len).decode("latin1")] = ffi.string(ffi.cast("char*", iov[i+1].iov_base), iov[i+1].iov_len).decode("latin1")
- 
-     environ['wsgi.version'] = (1, 0)
-     scheme = 'http'
-@@ -523,6 +578,7 @@ lib.uwsgi_pypy_hook_paste_loader = uwsgi_pypy_paste_lo
- lib.uwsgi_pypy_hook_pythonpath = uwsgi_pypy_pythonpath
- lib.uwsgi_pypy_hook_request = uwsgi_pypy_wsgi_handler
- lib.uwsgi_pypy_post_fork_hook = uwsgi_pypy_post_fork_hook
-+lib.uwsgi_pypy_hook_atexit = uwsgi_pypy_atexit
- 
- """
- Here we define the "uwsgi" virtual module
-@@ -537,7 +593,7 @@ uwsgi.hostname = ffi.string(lib.uwsgi.hostname)
- def uwsgi_pypy_uwsgi_register_signal(signum, kind, handler):
-     cb = ffi.callback('void(int)', handler)
-     uwsgi_gc.append(cb)
--    if lib.uwsgi_register_signal(signum, ffi.new("char[]", kind), cb, lib.pypy_plugin.modifier1) < 0:
-+    if lib.uwsgi_register_signal(signum, ffi.new("char[]", kind), cb, lib.pypy3_plugin.modifier1) < 0:
-         raise Exception("unable to register signal %d" % signum)
- uwsgi.register_signal = uwsgi_pypy_uwsgi_register_signal
- 
-@@ -562,7 +618,7 @@ def uwsgi_pypy_uwsgi_register_rpc(name, func, argc=0):
-     rpc_func = uwsgi_pypy_RPC(func)
-     cb = ffi.callback("int(int, char*[], int[], char**)", rpc_func)
-     uwsgi_gc.append(cb)
--    if lib.uwsgi_register_rpc(ffi.new("char[]", name), ffi.addressof(lib.pypy_plugin), argc, cb) < 0:
-+    if lib.uwsgi_register_rpc(ffi.new("char[]", name), ffi.addressof(lib.pypy3_plugin), argc, cb) < 0:
-         raise Exception("unable to register rpc func %s" % name)
- uwsgi.register_rpc = uwsgi_pypy_uwsgi_register_rpc
- 
-@@ -598,8 +654,8 @@ uwsgi.rpc = uwsgi_pypy_rpc
- 
- def uwsgi_pypy_call(func, *args):
-     node = None
--    if '@' in func:
--        (func, node) = func.split('@')
-+    if b'@' in func:
-+        (func, node) = func.split(b'@')
-     return uwsgi_pypy_rpc(node, func, *args)
- uwsgi.call = uwsgi_pypy_call
-