mod-wsgi 6.0.5.dev1__tar.gz → 6.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mod-wsgi might be problematic. Click here for more details.
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/PKG-INFO +2 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/README-standalone.rst +11 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/README.rst +6 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/PKG-INFO +2 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/setup.py +2 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_adapter.c +6 -3
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_adapter.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_apache.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_apache.h +2 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_auth.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_auth.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_buckets.c +4 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_config.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_config.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_convert.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_convert.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_daemon.c +8 -4
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_daemon.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_dispatch.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_dispatch.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_environ.c +4 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_environ.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_execute.c +6 -3
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_gc.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_input.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_interp.c +8 -7
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_logger.c +4 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_memory.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_metrics.c +3 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_module.c +3 -2
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_remote.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_remote.h +2 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_restrict.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_restrict.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_server.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_shutdown.c +3 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_shutdown.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_signal.c +3 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_signal.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_stream.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_telemetry.c +3 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_thread.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_validate.c +3 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_validate.h +1 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_version.h +3 -3
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/CREDITS.rst +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/LICENSE +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/MANIFEST.in +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/Makefile.in +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/README-express.rst +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/configure +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/configure.ac +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/images/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/images/snake-whiskey.jpg +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/SOURCES.txt +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/dependency_links.txt +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/entry_points.txt +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/not-zip-safe +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/mod_wsgi.egg-info/top_level.txt +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/setup.cfg +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/diagnostics/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/diagnostics/environ.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/diagnostics/hello.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/apache.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/cli.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/management/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/management/commands/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/management/commands/runmodwsgi.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/options.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/platform.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/reloader.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/runtime.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/scripts.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/express/server.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/management/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/management/commands/__init__.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/management/commands/runmodwsgi.py +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/mod_wsgi.c +1 -1
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_buckets.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_execute.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_gc.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_input.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_interp.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_logger.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_memory.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_metrics.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_module.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_python.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_server.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_stream.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_telemetry.h +0 -0
- {mod_wsgi-6.0.5.dev1 → mod_wsgi-6.1.0}/src/server/wsgi_thread.h +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mod_wsgi
|
|
3
|
-
Version: 6.0
|
|
3
|
+
Version: 6.1.0
|
|
4
4
|
Summary: Installer for Apache/mod_wsgi.
|
|
5
5
|
Home-page: https://www.modwsgi.org/
|
|
6
6
|
Author: Graham Dumpleton
|
|
@@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.12
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.13
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.14
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
28
29
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
|
|
29
30
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server
|
|
30
31
|
Requires-Python: >=3.10
|
|
@@ -31,6 +31,17 @@ usage instructions outlined on the mod_wsgi documentation site at
|
|
|
31
31
|
https://www.modwsgi.org, substituting ``mod_wsgi-standalone`` for
|
|
32
32
|
``mod_wsgi`` as the package to install.
|
|
33
33
|
|
|
34
|
+
The documentation has a page specifically about this package, `The
|
|
35
|
+
mod_wsgi-standalone Package
|
|
36
|
+
<https://www.modwsgi.org/en/latest/user-guides/mod-wsgi-standalone-package.html>`_.
|
|
37
|
+
It covers what the host needs in order to compile everything, how
|
|
38
|
+
support for HTTPS depends on the OpenSSL development files being
|
|
39
|
+
present when Apache is compiled, how the version of Apache you get is
|
|
40
|
+
tied to the version of ``mod_wsgi-standalone`` you install, how
|
|
41
|
+
security fixes for Apache reach you, and why ``mod_wsgi-httpd`` and
|
|
42
|
+
``mod_wsgi`` should not be listed as two separate dependencies in place
|
|
43
|
+
of ``mod_wsgi-standalone``.
|
|
44
|
+
|
|
34
45
|
**NOTE: Although this package may allow you to install a standalone Apache
|
|
35
46
|
version, it is only really recommended that you use this package if you
|
|
36
47
|
have absolutely no other choice for getting the Apache httpd server
|
|
@@ -40,7 +40,12 @@ Python Package Index:
|
|
|
40
40
|
|
|
41
41
|
* `mod_wsgi-standalone`_ on PyPI additionally installs a private
|
|
42
42
|
build of Apache into your Python environment, for use on
|
|
43
|
-
UNIX-like systems where no system Apache is available.
|
|
43
|
+
UNIX-like systems where no system Apache is available. It is the
|
|
44
|
+
same source code and version as ``mod_wsgi``, with an added
|
|
45
|
+
dependency on the separate ``mod_wsgi-httpd`` package, which
|
|
46
|
+
supplies that Apache. See `The mod_wsgi-standalone Package
|
|
47
|
+
<https://www.modwsgi.org/en/latest/user-guides/mod-wsgi-standalone-package.html>`_
|
|
48
|
+
in the documentation.
|
|
44
49
|
|
|
45
50
|
* `mod_wsgi-telemetry`_ on PyPI is the out-of-process telemetry
|
|
46
51
|
ingester and live UI that consume datagrams emitted when the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mod_wsgi
|
|
3
|
-
Version: 6.0
|
|
3
|
+
Version: 6.1.0
|
|
4
4
|
Summary: Installer for Apache/mod_wsgi.
|
|
5
5
|
Home-page: https://www.modwsgi.org/
|
|
6
6
|
Author: Graham Dumpleton
|
|
@@ -25,6 +25,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.12
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.13
|
|
27
27
|
Classifier: Programming Language :: Python :: 3.14
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
28
29
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
|
|
29
30
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server
|
|
30
31
|
Requires-Python: >=3.10
|
|
@@ -441,6 +441,7 @@ setup(name = package_name,
|
|
|
441
441
|
'Programming Language :: Python :: 3.12',
|
|
442
442
|
'Programming Language :: Python :: 3.13',
|
|
443
443
|
'Programming Language :: Python :: 3.14',
|
|
444
|
+
'Programming Language :: Python :: 3.15',
|
|
444
445
|
'Topic :: Internet :: WWW/HTTP :: WSGI',
|
|
445
446
|
'Topic :: Internet :: WWW/HTTP :: WSGI :: Server'
|
|
446
447
|
],
|
|
@@ -456,6 +457,6 @@ setup(name = package_name,
|
|
|
456
457
|
entry_points = { 'console_scripts':
|
|
457
458
|
['mod_wsgi-express = mod_wsgi.express.cli:main'],},
|
|
458
459
|
zip_safe = False,
|
|
459
|
-
install_requires = standalone and ['mod_wsgi-httpd==2.4.68.
|
|
460
|
+
install_requires = standalone and ['mod_wsgi-httpd==2.4.68.2'] or [],
|
|
460
461
|
python_requires='>=3.10',
|
|
461
462
|
)
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_adapter.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_buckets.h"
|
|
@@ -266,7 +269,7 @@ static PyObject *Adapter_start_response(AdapterObject *self, PyObject *args)
|
|
|
266
269
|
|
|
267
270
|
/* Transfer ownership of headers_as_bytes to self->headers and
|
|
268
271
|
* disclaim the local so the finally XDECREF below is a no-op
|
|
269
|
-
* for this object
|
|
272
|
+
* for this object, which avoids the +1/-1 refcount round-trip the
|
|
270
273
|
* older INCREF-then-XDECREF pattern incurred. */
|
|
271
274
|
|
|
272
275
|
Py_XDECREF(self->headers);
|
|
@@ -297,7 +300,7 @@ static int Adapter_output(AdapterObject *self, const char *data,
|
|
|
297
300
|
* around ap_pass_brigade and apr_brigade_cleanup. They are
|
|
298
301
|
* captured *inside* each WSGI_BEGIN_ALLOW_THREADS block, so the
|
|
299
302
|
* accumulated self->output_time measures only the time the WSGI
|
|
300
|
-
* app spent waiting for Apache to take its data
|
|
303
|
+
* app spent waiting for Apache to take its data: header
|
|
301
304
|
* processing, bucket construction and the GIL re-acquire wait
|
|
302
305
|
* (which WSGI_END_ALLOW_THREADS attributes to gil_wait_time)
|
|
303
306
|
* are deliberately excluded. Same pattern as Input_read_from_input
|
|
@@ -1667,7 +1670,7 @@ int Adapter_run(AdapterObject *self, PyObject *object)
|
|
|
1667
1670
|
/* PyObject_HasAttrString swallows all exceptions raised by
|
|
1668
1671
|
* the lookup, so a custom __getattribute__ that raises would
|
|
1669
1672
|
* be silently treated as "no close method". Use
|
|
1670
|
-
* GetAttrString and only treat AttributeError as benign
|
|
1673
|
+
* GetAttrString and only treat AttributeError as benign. Any
|
|
1671
1674
|
* other exception gets a context preamble logged here, then
|
|
1672
1675
|
* is left set so the PyErr_Occurred() block below prints the
|
|
1673
1676
|
* traceback after our preamble. */
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_buckets.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_interp.h"
|
|
@@ -131,7 +134,7 @@ apr_bucket *wsgi_apr_bucket_python_create(const char *buf, apr_size_t length,
|
|
|
131
134
|
* for the matching decref.
|
|
132
135
|
*
|
|
133
136
|
* The two branches have asymmetric GIL-handling invariants that are
|
|
134
|
-
* load-bearing
|
|
137
|
+
* load-bearing, so do not collapse them.
|
|
135
138
|
*
|
|
136
139
|
* else-branch (first setaside, decref_string == 0): the caller is the
|
|
137
140
|
* WSGI write path, which already holds the GIL on
|
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_daemon.h"
|
|
25
|
+
|
|
22
26
|
#include "wsgi_server.h"
|
|
23
27
|
#include "wsgi_interp.h"
|
|
24
28
|
#include "wsgi_config.h"
|
|
@@ -2098,7 +2102,7 @@ static void *wsgi_daemon_thread(apr_thread_t *thd, void *data)
|
|
|
2098
2102
|
/*
|
|
2099
2103
|
* Record the Python thread id of this worker so the monitor thread
|
|
2100
2104
|
* can target it with PyThreadState_SetAsyncExc() when injecting a
|
|
2101
|
-
* RequestTimeout exception. Safe to call without the GIL
|
|
2105
|
+
* RequestTimeout exception. Safe to call without the GIL, as this is
|
|
2102
2106
|
* just a wrapper around the OS thread API.
|
|
2103
2107
|
*/
|
|
2104
2108
|
|
|
@@ -2389,7 +2393,7 @@ static void wsgi_inject_request_timeout(WSGIDaemonThread *thread)
|
|
|
2389
2393
|
* in-flight request whose elapsed time has not yet exceeded the
|
|
2390
2394
|
* "stale" cutoff (request-timeout + interrupt-timeout). A thread that
|
|
2391
2395
|
* has been wedged for longer than that is treated as already-gone for
|
|
2392
|
-
* drain purposes
|
|
2396
|
+
* drain purposes: it will not unwind voluntarily, so waiting for it
|
|
2393
2397
|
* before progressing to shutdown-timeout serves no purpose. Caller
|
|
2394
2398
|
* MUST hold the monitor lock; thread->request mutations are guarded
|
|
2395
2399
|
* by that same lock.
|
|
@@ -2509,7 +2513,7 @@ static void *wsgi_monitor_thread(apr_thread_t *thd, void *data)
|
|
|
2509
2513
|
*
|
|
2510
2514
|
* interrupt-timeout > 0
|
|
2511
2515
|
* Inject mod_wsgi.RequestTimeout into the offending
|
|
2512
|
-
* thread (one inject per pass
|
|
2516
|
+
* thread (one inject per pass; multiple eligible
|
|
2513
2517
|
* threads get picked up across consecutive passes, each
|
|
2514
2518
|
* with its own injected_at grace timer). If a thread
|
|
2515
2519
|
* has already been injected and its interrupt-timeout
|
|
@@ -3061,7 +3065,7 @@ static void wsgi_daemon_main(apr_pool_t *p, WSGIDaemonProcess *daemon)
|
|
|
3061
3065
|
* thread count by natural log: T_fire = request-timeout * (1 + ln(n)).
|
|
3062
3066
|
* At n=1 this collapses to request-timeout. At higher thread counts
|
|
3063
3067
|
* it grants more patience to absorb genuine outliers without
|
|
3064
|
-
* letting the threshold run away
|
|
3068
|
+
* letting the threshold run away: n=10 gives ~3.3x base, n=25
|
|
3065
3069
|
* gives ~4.2x. Computed once here because it depends only on
|
|
3066
3070
|
* init-time values.
|
|
3067
3071
|
*/
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_environ.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_logger.h"
|
|
@@ -845,7 +848,7 @@ static void wsgi_add_vars_to_environment(request_rec *r)
|
|
|
845
848
|
* CGI request-line variables, transcribed from ap_add_cgi_vars().
|
|
846
849
|
* Use setn so these win over any pre-existing entries inherited
|
|
847
850
|
* via the temp table. The PATH_TRANSLATED block is deliberately
|
|
848
|
-
* omitted
|
|
851
|
+
* omitted: that is the subrequest we are avoiding. GATEWAY_INTERFACE
|
|
849
852
|
* is also omitted: it is not required by PEP 3333 and the "CGI/1.1"
|
|
850
853
|
* value upstream sets is misleading for a WSGI environment.
|
|
851
854
|
*/
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_execute.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_server.h"
|
|
@@ -44,8 +47,8 @@ int wsgi_execute_script(request_rec *r)
|
|
|
44
47
|
WSGIThreadInfo *thread_info = NULL;
|
|
45
48
|
|
|
46
49
|
/* Clear any leftover staged GIL-wait value from a prior request
|
|
47
|
-
* handled on this worker thread. The next instrumented site
|
|
48
|
-
* starting with the initial interp acquire below
|
|
50
|
+
* handled on this worker thread. The next instrumented site,
|
|
51
|
+
* starting with the initial interp acquire below, will accumulate
|
|
49
52
|
* into the staging slot, drained into the per-request active slot
|
|
50
53
|
* at wsgi_start_request. */
|
|
51
54
|
wsgi_gil_wait_reset();
|
|
@@ -82,7 +85,7 @@ int wsgi_execute_script(request_rec *r)
|
|
|
82
85
|
* The interpreter handle's name is duplicated into the
|
|
83
86
|
* wsgi_interpreters pool (process-lifetime), so the pointer
|
|
84
87
|
* stored here remains valid for any reader for the rest of the
|
|
85
|
-
* Apache child's life
|
|
88
|
+
* Apache child's life, with no dependency on the request pool.
|
|
86
89
|
*/
|
|
87
90
|
|
|
88
91
|
wsgi_thread_info(1, 0)->current_application_group = interp->name;
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_interp.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_version.h"
|
|
24
|
-
|
|
25
|
-
#include "wsgi_apache.h"
|
|
26
27
|
#include "wsgi_server.h"
|
|
27
28
|
#include "wsgi_config.h"
|
|
28
29
|
#include "wsgi_logger.h"
|
|
@@ -2413,7 +2414,7 @@ apr_status_t wsgi_python_init(apr_pool_t *p)
|
|
|
2413
2414
|
* In daemon mode wsgi_python_init also runs inside the daemon
|
|
2414
2415
|
* child after fork, but daemon processes pick up their value
|
|
2415
2416
|
* from daemon->group->switch_interval after wsgi_python_child_init
|
|
2416
|
-
* (see wsgi_daemon.c)
|
|
2417
|
+
* (see wsgi_daemon.c). Applying the server-config value here
|
|
2417
2418
|
* would shadow that and emit a redundant INFO log line. */
|
|
2418
2419
|
#if defined(MOD_WSGI_WITH_DAEMONS)
|
|
2419
2420
|
if (wsgi_daemon_process == NULL &&
|
|
@@ -2626,7 +2627,7 @@ InterpreterObject *wsgi_acquire_interpreter(const char *name)
|
|
|
2626
2627
|
* The catch is that the simplified API is designed for
|
|
2627
2628
|
* scoped use: the matching pair Ensure/Release tears the
|
|
2628
2629
|
* thread state down again at the end of the outer
|
|
2629
|
-
* Release. We do not want that
|
|
2630
|
+
* Release. We do not want that. We want the thread
|
|
2630
2631
|
* state, and therefore any thread local data Python or
|
|
2631
2632
|
* extensions have attached to it (threading.local,
|
|
2632
2633
|
* contextvars defaults, extension-side TLS via
|
|
@@ -2647,14 +2648,14 @@ InterpreterObject *wsgi_acquire_interpreter(const char *name)
|
|
|
2647
2648
|
* Release in wsgi_release_interpreter brings it back
|
|
2648
2649
|
* down to 1, which is non-zero, so Release just drops
|
|
2649
2650
|
* the GIL via PyEval_SaveThread() and leaves the thread
|
|
2650
|
-
* state
|
|
2651
|
+
* state (and its TSS registration) in place for the
|
|
2651
2652
|
* next request on this thread. We only do the bump on
|
|
2652
2653
|
* the first Ensure (counter == 1); any nested Ensure
|
|
2653
2654
|
* from inside the request leaves the counter alone so
|
|
2654
2655
|
* pairing inside the request still balances normally.
|
|
2655
2656
|
*
|
|
2656
2657
|
* gilstate_counter is exposed via Include/cpython/
|
|
2657
|
-
* pystate.h, which is the unstable CPython tier
|
|
2658
|
+
* pystate.h, which is the unstable CPython tier: the
|
|
2658
2659
|
* field is not part of the stable ABI and could in
|
|
2659
2660
|
* principle be renamed or removed in a future release.
|
|
2660
2661
|
* There is no public API equivalent for "extend the
|
|
@@ -3274,7 +3275,7 @@ static apr_status_t wsgi_python_child_cleanup(void *data)
|
|
|
3274
3275
|
* is shutting down here. For daemon we did it earlier
|
|
3275
3276
|
* before trying to wait on request threads. The telemetry
|
|
3276
3277
|
* lifecycle datagrams (STOPPING and the final-tick + STOPPED
|
|
3277
|
-
* sequence) follow the same split
|
|
3278
|
+
* sequence) follow the same split: daemon mode emits them in
|
|
3278
3279
|
* wsgi_daemon_main; embedded mode emits both here back-to-back
|
|
3279
3280
|
* since Apache has already drained worker requests by the time
|
|
3280
3281
|
* this cleanup hook runs.
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_logger.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_server.h"
|
|
@@ -1197,7 +1200,7 @@ void wsgi_log_python_error_ex(const char *file, int line, int module_index,
|
|
|
1197
1200
|
* Server-scope callers run during single-threaded init, so the
|
|
1198
1201
|
* sub-pool create on the process pool is not racing other
|
|
1199
1202
|
* threads. If the sub-pool can't be created (OOM), fall back
|
|
1200
|
-
* to the parent pool
|
|
1203
|
+
* to the parent pool: the leak is preferable to crashing
|
|
1201
1204
|
* while logging an exception. The sub-pool is destroyed once
|
|
1202
1205
|
* the header has been emitted.
|
|
1203
1206
|
*/
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_metrics.h"
|
|
22
25
|
|
|
23
|
-
#include "wsgi_apache.h"
|
|
24
26
|
#include "wsgi_daemon.h"
|
|
25
27
|
#include "wsgi_server.h"
|
|
26
28
|
#include "wsgi_memory.h"
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_module.h"
|
|
22
25
|
|
|
23
26
|
#include "wsgi_version.h"
|
|
24
|
-
|
|
25
|
-
#include "wsgi_apache.h"
|
|
26
27
|
#include "wsgi_server.h"
|
|
27
28
|
#include "wsgi_logger.h"
|
|
28
29
|
#include "wsgi_stream.h"
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
|
|
22
22
|
/* ------------------------------------------------------------------------- */
|
|
23
23
|
|
|
24
|
+
#include "wsgi_python.h"
|
|
24
25
|
#include "wsgi_apache.h"
|
|
26
|
+
|
|
25
27
|
#include "wsgi_daemon.h"
|
|
26
28
|
|
|
27
29
|
/* ------------------------------------------------------------------------- */
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_shutdown.h"
|
|
22
25
|
|
|
23
|
-
#include "wsgi_apache.h"
|
|
24
26
|
#include "wsgi_server.h"
|
|
25
27
|
#include "wsgi_logger.h"
|
|
26
28
|
#include "wsgi_module.h"
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
/* ------------------------------------------------------------------------- */
|
|
20
20
|
|
|
21
|
+
#include "wsgi_python.h"
|
|
22
|
+
#include "wsgi_apache.h"
|
|
23
|
+
|
|
21
24
|
#include "wsgi_signal.h"
|
|
22
25
|
|
|
23
|
-
#include "wsgi_apache.h"
|
|
24
26
|
#include "wsgi_server.h"
|
|
25
27
|
#include "wsgi_logger.h"
|
|
26
28
|
#include "wsgi_daemon.h"
|
|
@@ -36,11 +36,13 @@
|
|
|
36
36
|
|
|
37
37
|
#include "wsgi_python.h"
|
|
38
38
|
#include "wsgi_apache.h"
|
|
39
|
+
|
|
40
|
+
#include "wsgi_telemetry.h"
|
|
41
|
+
|
|
39
42
|
#include "wsgi_server.h"
|
|
40
43
|
#include "wsgi_daemon.h"
|
|
41
44
|
#include "wsgi_logger.h"
|
|
42
45
|
#include "wsgi_metrics.h"
|
|
43
|
-
#include "wsgi_telemetry.h"
|
|
44
46
|
#include "wsgi_version.h"
|
|
45
47
|
#include "wsgi_module.h"
|
|
46
48
|
#include "wsgi_interp.h"
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
/* Module version information. */
|
|
25
25
|
|
|
26
26
|
#define MOD_WSGI_MAJORVERSION_NUMBER 6
|
|
27
|
-
#define MOD_WSGI_MINORVERSION_NUMBER
|
|
28
|
-
#define MOD_WSGI_MICROVERSION_NUMBER
|
|
29
|
-
#define MOD_WSGI_VERSION_STRING "6.0
|
|
27
|
+
#define MOD_WSGI_MINORVERSION_NUMBER 1
|
|
28
|
+
#define MOD_WSGI_MICROVERSION_NUMBER 0
|
|
29
|
+
#define MOD_WSGI_VERSION_STRING "6.1.0"
|
|
30
30
|
|
|
31
31
|
/* ------------------------------------------------------------------------- */
|
|
32
32
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|