diff options
Diffstat (limited to 'www-apache')
-rw-r--r-- | www-apache/mod_wsgi/ChangeLog | 6 | ||||
-rw-r--r-- | www-apache/mod_wsgi/Manifest | 30 | ||||
-rw-r--r-- | www-apache/mod_wsgi/files/mod_wsgi-3.3-python-3.2.patch | 256 |
3 files changed, 273 insertions, 19 deletions
diff --git a/www-apache/mod_wsgi/ChangeLog b/www-apache/mod_wsgi/ChangeLog index 86c32867384a..7951a7b6514c 100644 --- a/www-apache/mod_wsgi/ChangeLog +++ b/www-apache/mod_wsgi/ChangeLog @@ -1,6 +1,10 @@ # ChangeLog for www-apache/mod_wsgi # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_wsgi/ChangeLog,v 1.30 2011/04/22 21:58:23 arfrever Exp $ +# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_wsgi/ChangeLog,v 1.31 2011/05/11 19:12:59 arfrever Exp $ + + 11 May 2011; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org> + files/mod_wsgi-3.3-python-3.2.patch: + Fix compatibility with Python 3.2 (bug #364583). 22 Apr 2011; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org> mod_wsgi-3.3.ebuild, +files/mod_wsgi-3.3-python-3.2.patch: diff --git a/www-apache/mod_wsgi/Manifest b/www-apache/mod_wsgi/Manifest index 61ea1bb8949b..2eb908624296 100644 --- a/www-apache/mod_wsgi/Manifest +++ b/www-apache/mod_wsgi/Manifest @@ -2,25 +2,25 @@ Hash: SHA1 AUX 70_mod_wsgi.conf 100 RMD160 60c74317eded93c727cc5ebb74e33f1e040d4187 SHA1 cf23e48a59c624cfc021dda43f3d16a899f4be3a SHA256 a4c1b49eb8c6d6609ad8ae8a9f8d6621f9f2bbc2c99addef3e2d6404ac364ed7 -AUX mod_wsgi-3.3-python-3.2.patch 1514 RMD160 a2dcf7eb773269970d5b47849e671e4918a44d8c SHA1 c7b1c4256983ecb206f8d489befc301456cfd49d SHA256 a4f32c4391aeb7c41fe6e0e2becd93981ad4ec7795b61508fe3b466b3c5de7d2 +AUX mod_wsgi-3.3-python-3.2.patch 8849 RMD160 99947d46936b15bc92cd345e90ac4bf538252000 SHA1 5542fb478cea29b704ce1d6657f39c18424a854b SHA256 49c15768d67ef05b9dad2d6890c139e744e6945c00ce3d333b10c7077e4dc899 DIST mod_wsgi-3.3.tar.gz 117930 RMD160 759cf57d691924271fbc45af10596c033c063c89 SHA1 f32d38e5d3ed5de1efd5abefb52678f833dc9166 SHA256 d96e1078990484cfe5579df1e95dc73f009495e9c3f9a066b0983650bd9e3243 EBUILD mod_wsgi-3.3.ebuild 801 RMD160 cbfc68715573bf2a759cc58194b94d14039689b8 SHA1 52053953eda8b8bef87d5a3e54a00397056607cb SHA256 556d1a54bca96772a53fd2ef18eadc983bc77941501960e8e12a217e0e6aaf0a -MISC ChangeLog 3903 RMD160 4338abbfc789a071aaebb358b73c41df253f9b0b SHA1 26d1e45801398853a455730be2da88020122d549 SHA256 69a780ae559f0405f01ebe1a0b70abf473fdb2ceb8fff0394ceb700f4ce62ea5 +MISC ChangeLog 4067 RMD160 3121261069efc041e73a674cdb545d1ccd3b65dc SHA1 057fa249f1ac1e98908de86a74b5d5508ccefe4b SHA256 ace09267060834af32c85e9b3dc95f986f6f81e7a14d2cfbe8e9e251da5dfe76 MISC metadata.xml 259 RMD160 fdfb533f35254e0f704a6c83132a4bd2b65809f9 SHA1 3afaadaec126f2d24b4fe32a5d8870368f5d72e3 SHA256 5aa0df1f4a87632694a5d911aa6efc123c1c80aeb9ddf39d63de7ba9e0de8536 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (GNU/Linux) -iQIcBAEBAgAGBQJNsfoMAAoJENgZr6v6gHY0jxYQAMIY1XWpNQ1njlbtaRA0QpnK -Q7bua6JWkaFKnwhyjbgXRfPQWuV3h83pFkcwgTIR8tEGhzN1NjFS+gmeweAlzoZM -Djs84xbjOXJrHzPEfbWADfdIEzQTGws/T4/tSzE+lUymFwdd56mVbg5PQpZcrrSf -y1c0KDFr2cArwn7r+VzaVVdOuarxCN7CmU855ItO3RoCjhasv/IgnV31XglwB1cO -Egl0eMESeg1y44lyy85FOLpdWP0YsBmV5AYgkolVUEjl9ib0bsPBR4SaZldQf2iK -3j+yznZj5pBbf6d0Nt7mAudmWLo4BB3w37YRsRtC4gygMLU/XIo3EP7nQXOrjsXE -ug+2c7xKh73k4ed9XQT31pjWBWnvbVplZQ+d7bGEI5DpL6w3BZf7fl8aa0yapSZR -RMXi0mTaItq6D+o8ITVF/mpxukdSkreb4KBC2KtgFQRaSBILqH2fMNjMgoNYoX/M -OaDnuzTx8V7L6TN5dASpnyIg6bNnhz25jfrOfnBth/qo6pjZkjyJcA3fAwGXjUPs -AbjxJWZShOdAJjT9dyWfaCOXuhBne0gKZhRzYh+fdNNJHQit7/nvEtH4KXBGgAxT -I090el6vbgZTPA2FxX5dX6T9wfQLedVFGHA1xUv7Gdnq5ILDjZBVRkI9nEH03oXj -UqBfrSgBdufz1E+OvZ0X -=y/5E +iQIcBAEBAgAGBQJNyt/PAAoJENgZr6v6gHY0jJwP/jrj0sKTErNf5+klCFAOhMkg ++P7U1QM168N6sEJ4QLhscwaE6NHg7VwblK9qzR/b8CE7kSQPyrFzTz4ze8hVNdnV +tlGT03I2LF+3t5gZpqU5xwHKE+C/Ln7sE6sYtcBAElAq2ZEzj2pSKqh9hGDdXSpv +nD+J6gt4ffcALw5kB9Vyx9BOqY5Id83nM30j2cJfLdUGjfaN8rw4QM9ueXnzON8t +kg5KoTB+aYHAZ9f0NMX8/UI+ZmxqFzn0JctQT6DznElznoOZ+TPKnqqd5U3d996q +xZ2rQE8xt5dCu7bKip3TML39qTFEid0/K6mejugvvNcN7nhsl02oPbDMA6hTFAq2 +SANO9BAMVAmZbg8E/TIOLKV+wlkXkps623M9Bz81/CYiFLLR9E4jcwJMC0wR52Qp +XjuJi4sd+8RfPWS7UQdLEwISgdZtBiIY6wiFN2LM8UwvQp9odlM2in05v/Szp2jc +1I1kzyHpDHYYl0p9hf5z8oDORUCvO4JS35SremIujEiKMNCV4jyyBNi00VrjFE4m +sHEZmraIA6XFC2BJv5krHHJkAIbPW1fWnZa3R9hYXs2b8H2PXRcsHUQbesgZ1ULv +CnME1ssMrIUKfOKfA6JrO0nxE58jmtaUMuCb5mO0w9LVibaf7aisRo1eno4FvG8d +kth5L51Mskyl7o5jem1Y +=Igi7 -----END PGP SIGNATURE----- diff --git a/www-apache/mod_wsgi/files/mod_wsgi-3.3-python-3.2.patch b/www-apache/mod_wsgi/files/mod_wsgi-3.3-python-3.2.patch index 2f50954ca856..ad35ff29097b 100644 --- a/www-apache/mod_wsgi/files/mod_wsgi-3.3-python-3.2.patch +++ b/www-apache/mod_wsgi/files/mod_wsgi-3.3-python-3.2.patch @@ -1,4 +1,5 @@ http://code.google.com/p/modwsgi/source/detail?r=637ee0510a49f5bf80fe49b2ee27158cf01855c6 +http://code.google.com/p/modwsgi/source/detail?r=d40a1bf6b9ad9cacc50caf0b3806b9a231e0d4d7 --- mod_wsgi.c +++ mod_wsgi.c @@ -11,7 +12,18 @@ http://code.google.com/p/modwsgi/source/detail?r=637ee0510a49f5bf80fe49b2ee27158 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. -@@ -3598,7 +3598,11 @@ +@@ -386,6 +386,10 @@ + #define WSGI_RELOAD_MODULE 0 + #define WSGI_RELOAD_PROCESS 1 + ++/* Python interpreter state. */ ++ ++static PyThreadState *wsgi_main_tstate = NULL; ++ + /* Base server object. */ + + static server_rec *wsgi_server = NULL; +@@ -3598,7 +3602,11 @@ */ if (!wsgi_daemon_pool && self->config->pass_apache_request) { @@ -23,7 +35,198 @@ http://code.google.com/p/modwsgi/source/detail?r=637ee0510a49f5bf80fe49b2ee27158 PyDict_SetItemString(vars, "apache.request_rec", object); Py_DECREF(object); } -@@ -8369,7 +8373,11 @@ +@@ -5147,15 +5155,22 @@ + PyObject *exitfunc = NULL; + PyObject *module = NULL; + ++ PyThreadState *tstate_enter = NULL; ++ + /* +- * We should always enter here with the Python GIL held, but +- * there will be no active thread state. Note that it should +- * be safe to always assume that the simplified GIL state +- * API lock was originally unlocked as always calling in +- * from an Apache thread outside of Python. ++ * We should always enter here with the Python GIL ++ * held and an active thread state. This should only ++ * now occur when shutting down interpreter and not ++ * when releasing interpreter as don't support ++ * recyling of interpreters within the process. Thus ++ * the thread state should be that for the main ++ * Python interpreter. Where dealing with a named ++ * sub interpreter, we need to change the thread ++ * state to that which was originally used to create ++ * that sub interpreter before doing anything. + */ + +- PyEval_ReleaseLock(); ++ tstate_enter = PyThreadState_Get(); + + if (*self->name) { + #if APR_HAS_THREADS +@@ -5194,10 +5209,13 @@ + tstate = self->tstate; + #endif + +- PyEval_AcquireThread(tstate); ++ /* ++ * Swap to interpreter thread state that was used when ++ * the sub interpreter was created. ++ */ ++ ++ PyThreadState_Swap(tstate); + } +- else +- PyGILState_Ensure(); + + if (self->owner) { + Py_BEGIN_ALLOW_THREADS +@@ -5492,20 +5510,7 @@ + + /* If we own it, we destroy it. */ + +- if (!self->owner) { +- if (*self->name) { +- tstate = PyThreadState_Get(); +- +- PyThreadState_Clear(tstate); +- PyEval_ReleaseThread(tstate); +- PyThreadState_Delete(tstate); +- } +- else +- PyGILState_Release(PyGILState_UNLOCKED); +- +- PyEval_AcquireLock(); +- } +- else { ++ if (self->owner) { + /* + * We need to destroy all the thread state objects + * associated with the interpreter. If there are +@@ -5539,6 +5544,8 @@ + /* Can now destroy the interpreter. */ + + Py_EndInterpreter(tstate); ++ ++ PyThreadState_Swap(tstate_enter); + } + + free(self->name); +@@ -5647,7 +5654,14 @@ + ap_log_error(APLOG_MARK, WSGI_LOG_INFO(0), wsgi_server, + "mod_wsgi (pid=%d): Terminating Python.", getpid()); + +- PyGILState_Ensure(); ++ /* ++ * We should be executing in the main thread again at this ++ * point but without the GIL, so simply restore the original ++ * thread state for that thread that we remembered when we ++ * initialised the interpreter. ++ */ ++ ++ PyEval_AcquireThread(wsgi_main_tstate); + + /* + * Work around bug in Python 3.X whereby it will crash if +@@ -5822,15 +5836,24 @@ + /* Initialise threading. */ + + PyEval_InitThreads(); +- PyThreadState_Swap(NULL); +- PyEval_ReleaseLock(); ++ ++ /* ++ * We now want to release the GIL. Before we do that ++ * though we remember what the current thread state is. ++ * We will use that later to restore the main thread ++ * state when we want to cleanup interpreters on ++ * shutdown. ++ */ ++ ++ wsgi_main_tstate = PyThreadState_Get(); ++ PyEval_ReleaseThread(wsgi_main_tstate); + + wsgi_python_initialized = 1; + +- /* +- * Register cleanups to be performed on parent restart +- * or shutdown. This will destroy Python itself. +- */ ++ /* ++ * Register cleanups to be performed on parent restart ++ * or shutdown. This will destroy Python itself. ++ */ + + #if AP_SERVER_MAJORVERSION_NUMBER < 2 + ap_register_cleanup(p, NULL, wsgi_python_parent_cleanup, +@@ -5879,7 +5902,11 @@ + + /* + * This function should never be called when the +- * Python GIL is held, so need to acquire it. ++ * Python GIL is held, so need to acquire it. Even ++ * though we may need to work with a sub ++ * interpreter, we need to acquire GIL against main ++ * interpreter first to work with interpreter ++ * dictionary. + */ + + state = PyGILState_Ensure(); +@@ -5998,6 +6025,8 @@ + { + PyThreadState *tstate = NULL; + ++ PyGILState_STATE state; ++ + /* + * Need to release and destroy the thread state that + * was created against the interpreter. This will +@@ -6023,11 +6052,11 @@ + * in its destruction if its the last reference. + */ + +- PyEval_AcquireLock(); ++ state = PyGILState_Ensure(); + + Py_DECREF(handle); + +- PyEval_ReleaseLock(); ++ PyGILState_Release(state); + } + + /* +@@ -6630,7 +6659,14 @@ + apr_thread_mutex_lock(wsgi_interp_lock); + #endif + +- PyEval_AcquireLock(); ++ /* ++ * We should be executing in the main thread again at this ++ * point but without the GIL, so simply restore the original ++ * thread state for that thread that we remembered when we ++ * initialised the interpreter. ++ */ ++ ++ PyEval_AcquireThread(wsgi_main_tstate); + + /* + * Extract a handle to the main Python interpreter from +@@ -6668,7 +6704,13 @@ + + Py_DECREF(interp); + +- PyEval_ReleaseLock(); ++ /* ++ * The code which performs actual shutdown of the main ++ * interpreter expects to be called without the GIL, so ++ * we release it here again. ++ */ ++ ++ PyEval_ReleaseThread(wsgi_main_tstate); + + /* + * Destroy Python itself including the main interpreter. +@@ -8369,7 +8411,11 @@ */ if (!wsgi_daemon_pool && self->config->pass_apache_request) { @@ -35,7 +238,54 @@ http://code.google.com/p/modwsgi/source/detail?r=637ee0510a49f5bf80fe49b2ee27158 PyDict_SetItemString(vars, "apache.request_rec", object); Py_DECREF(object); } -@@ -13372,7 +13380,11 @@ +@@ -10509,6 +10555,8 @@ + { + WSGIDaemonProcess *daemon = data; + ++ PyGILState_STATE gilstate; ++ + if (wsgi_server_config->verbose_debugging) { + ap_log_error(APLOG_MARK, WSGI_LOG_DEBUG(0), wsgi_server, + "mod_wsgi (pid=%d): Enable deadlock thread in " +@@ -10523,8 +10571,8 @@ + while (1) { + apr_sleep(apr_time_from_sec(1)); + +- PyEval_AcquireLock(); +- PyEval_ReleaseLock(); ++ gilstate = PyGILState_Ensure(); ++ PyGILState_Release(gilstate); + + apr_thread_mutex_lock(wsgi_shutdown_lock); + wsgi_deadlock_shutdown_time = apr_time_now(); +@@ -11101,6 +11149,7 @@ + if (wsgi_python_after_fork) + wsgi_python_init(p); + ++#if PY_MAJOR_VERSION < 3 + /* + * If mod_python is also being loaded and thus it was + * responsible for initialising Python it can leave in +@@ -11110,7 +11159,9 @@ + * initialisation but in daemon process we skip the + * mod_python child initialisation so the active thread + * state still exists. Thus need to do a bit of a fiddle +- * to ensure there is no active thread state. ++ * to ensure there is no active thread state. Don't need ++ * to worry about this with Python 3.X as mod_python ++ * only supports Python 2.X. + */ + + if (!wsgi_python_initialized) { +@@ -11126,6 +11177,7 @@ + + PyEval_ReleaseLock(); + } ++#endif + + /* + * If the daemon is associated with a virtual host then +@@ -13372,7 +13424,11 @@ */ if (!wsgi_daemon_pool && self->config->pass_apache_request) { |