Hello community,

here is the log from the commit of package apache2-mod_wsgi for 
openSUSE:Factory checked in at 2019-12-09 21:34:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apache2-mod_wsgi (Old)
 and      /work/SRC/openSUSE:Factory/.apache2-mod_wsgi.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apache2-mod_wsgi"

Mon Dec  9 21:34:22 2019 rev:26 rq:754581 version:4.6.8

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/apache2-mod_wsgi/apache2-mod_wsgi-python3.changes    
    2019-03-24 15:01:44.235165943 +0100
+++ 
/work/SRC/openSUSE:Factory/.apache2-mod_wsgi.new.4691/apache2-mod_wsgi-python3.changes
      2019-12-09 21:34:23.522117797 +0100
@@ -1,0 +2,19 @@
+Wed Dec  4 11:44:41 UTC 2019 - [email protected]
+
+- version update to 4.6.8
+  * If no system mime types file can be found, fall back to ``/dev/null``
+    so that Apache can still at least start up.
+  * Fix compilation failures when using Python 3.8.
+  * The Apache request ID is accessible in request events as ``request_id``.
+  * The per request data dictionary accessible using 
``mod_wsgi.request_data()``
+    is now also accessible in events as ``request_data``.
+  * When the queue timeout was triggered for requests sent to daemon mode
+    processes, the error response wasn't being flushed out correctly resulting
+    in the connection still being held up to the time of the socket timeout.
+
+-------------------------------------------------------------------
+Tue Dec  3 14:09:45 UTC 2019 - [email protected]
+
+- test with %apache_rex_check
+
+-------------------------------------------------------------------
apache2-mod_wsgi.changes: same change

Old:
----
  mod_wsgi-4.6.5.tar.gz

New:
----
  mod_wsgi-4.6.8.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ apache2-mod_wsgi-python3.spec ++++++
--- /var/tmp/diff_new_pack.f6MVnC/_old  2019-12-09 21:34:24.086117574 +0100
+++ /var/tmp/diff_new_pack.f6MVnC/_new  2019-12-09 21:34:24.090117572 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package apache2-mod_wsgi-python3
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -27,15 +27,16 @@
 BuildRequires:  httpd-devel
 %endif
 Name:           apache2-mod_wsgi-python3
-Version:        4.6.5
+Version:        4.6.8
 Release:        0
 Summary:        A WSGI interface for Python3 web applications in Apache
 License:        Apache-2.0
 Group:          Productivity/Networking/Web/Servers
-Url:            https://github.com/GrahamDumpleton/mod_wsgi
+URL:            https://github.com/GrahamDumpleton/mod_wsgi
 Source:         
https://github.com/GrahamDumpleton/mod_wsgi/archive/%{version}.tar.gz#/%{modname}-%{version}.tar.gz
 ## Work around for inconsistent Apache source tree in SLE 12, see bnc#915479
 Patch0:         wsgi_fixVersionCheck.patch
+BuildRequires:  apache-rex
 BuildRequires:  python3-devel
 Conflicts:      apache2-mod_wsgi
 Provides:       %{modname} = %{version}-%{release}
@@ -73,13 +74,8 @@
 %install
 make install DESTDIR=%{buildroot} LIBEXECDIR=%{apache_libexecdir}
 
-%if 0%{?suse_version} >= 1330
-# don't exist for <= Leap 42.1
 %check
-set +x
-%apache_test_module_load -m wsgi
-set -x
-%endif
+%apache_rex_check -m ./src/server/.libs mod_wsgi-basic
 
 %post
 %if 0%{?suse_version}

++++++ apache2-mod_wsgi.spec ++++++
--- /var/tmp/diff_new_pack.f6MVnC/_old  2019-12-09 21:34:24.114117563 +0100
+++ /var/tmp/diff_new_pack.f6MVnC/_new  2019-12-09 21:34:24.118117561 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package apache2-mod_wsgi
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -27,15 +27,16 @@
 BuildRequires:  httpd-devel
 %endif
 Name:           apache2-mod_wsgi
-Version:        4.6.5
+Version:        4.6.8
 Release:        0
 Summary:        A WSGI interface for Python web applications in Apache
 License:        Apache-2.0
 Group:          Productivity/Networking/Web/Servers
-Url:            https://github.com/GrahamDumpleton/mod_wsgi
+URL:            https://github.com/GrahamDumpleton/mod_wsgi
 Source:         
https://github.com/GrahamDumpleton/mod_wsgi/archive/%{version}.tar.gz#/%{modname}-%{version}.tar.gz
 ## Work around for inconsistent Apache source tree in SLE 12, see bnc#915479
 Patch0:         wsgi_fixVersionCheck.patch
+BuildRequires:  apache-rex
 BuildRequires:  python-devel
 Conflicts:      apache2-mod_wsgi-python3
 Provides:       %{modname} = %{version}-%{release}
@@ -73,13 +74,8 @@
 %install
 make install DESTDIR=%{buildroot} LIBEXECDIR=%{apache_libexecdir}
 
-%if 0%{?suse_version} >= 1330
-# don't exist for <= Leap 42.1
 %check
-set +x
-%apache_test_module_load -m wsgi
-set -x
-%endif
+%apache_rex_check -m ./src/server/.libs mod_wsgi-basic
 
 %post
 %if 0%{?suse_version}

++++++ mod_wsgi-4.6.5.tar.gz -> mod_wsgi-4.6.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/docs/conf.py 
new/mod_wsgi-4.6.8/docs/conf.py
--- old/mod_wsgi-4.6.5/docs/conf.py     2018-10-22 06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/docs/conf.py     2019-10-06 00:58:30.000000000 +0200
@@ -41,7 +41,7 @@
 
 # General information about the project.
 project = u'mod_wsgi'
-copyright = u'2007-2018, Graham Dumpleton'
+copyright = u'2007-2019, Graham Dumpleton'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mod_wsgi-4.6.5/docs/configuration-directives/WSGIDaemonProcess.rst 
new/mod_wsgi-4.6.8/docs/configuration-directives/WSGIDaemonProcess.rst
--- old/mod_wsgi-4.6.5/docs/configuration-directives/WSGIDaemonProcess.rst      
2018-10-22 06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/docs/configuration-directives/WSGIDaemonProcess.rst      
2019-10-06 00:58:30.000000000 +0200
@@ -240,9 +240,9 @@
     Note that the directory specified must exist and be writable by the
     user that the daemon process run as.
 
-**restart-interval=nnn**
-    Defines a time limit on how long a daemon process should run before
-    being restarted.
+**restart-interval=sss**
+    Defines a time limit in seconds for how long a daemon process should
+    run before being restarted.
 
     This might be use to periodically force restart the WSGI application
     processes when you have issues related to Python object reference count
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.6.rst 
new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.6.rst
--- old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.6.rst     1970-01-01 
01:00:00.000000000 +0100
+++ new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.6.rst     2019-10-06 
00:58:30.000000000 +0200
@@ -0,0 +1,28 @@
+=============
+Version 4.6.6
+=============
+
+Version 4.6.6 of mod_wsgi can be obtained from:
+
+  https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.6.6
+
+Bugs Fixed
+----------
+
+* Fix compilation failures when using Python 3.8.
+
+Features Changed
+----------------
+
+* When running ``mod_wsgi-express`` it will do a search for the location of
+  ``bash`` and ``sh`` when defining the shell to use for the generated
+  ``apachectl``. The shell used can be overridden using ``--shell-executable``
+  option. This is to get around issue with FreeBSD not having ``/bin/bash``.
+
+New Features
+------------
+
+* The Apache request ID is accessible in request events as ``request_id``.
+
+* The per request data dictionary accessible using ``mod_wsgi.request_data()``
+  is now also accessible in events as ``request_data``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.7.rst 
new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.7.rst
--- old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.7.rst     1970-01-01 
01:00:00.000000000 +0100
+++ new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.7.rst     2019-10-06 
00:58:30.000000000 +0200
@@ -0,0 +1,13 @@
+=============
+Version 4.6.7
+=============
+
+Version 4.6.7 of mod_wsgi can be obtained from:
+
+  https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.6.7
+
+Bugs Fixed
+----------
+
+* Fix Windows build errors due to Python 3.7+ not providing empty function
+  stubs for ``PyOS_AfterFork_Child()`` and ``PyOS_AfterFork_Parent()``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.8.rst 
new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.8.rst
--- old/mod_wsgi-4.6.5/docs/release-notes/version-4.6.8.rst     1970-01-01 
01:00:00.000000000 +0100
+++ new/mod_wsgi-4.6.8/docs/release-notes/version-4.6.8.rst     2019-10-06 
00:58:30.000000000 +0200
@@ -0,0 +1,21 @@
+=============
+Version 4.6.8
+=============
+
+Version 4.6.8 of mod_wsgi can be obtained from:
+
+  https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.6.8
+
+Bugs Fixed
+----------
+
+* When the queue timeout was triggered for requests sent to daemon mode
+  processes, the error response wasn't being flushed out correctly resulting
+  in the connection still being held up to the time of the socket timeout.
+
+New Features
+------------
+
+* Add ``--enable-sendfile`` option to ``mod_wsgi-express``. Should only be
+  used where the operating system kernel supports ``sendfile()`` for the
+  file system type where files are hosted.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/docs/release-notes.rst 
new/mod_wsgi-4.6.8/docs/release-notes.rst
--- old/mod_wsgi-4.6.5/docs/release-notes.rst   2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/docs/release-notes.rst   2019-10-06 00:58:30.000000000 
+0200
@@ -5,6 +5,9 @@
 .. toctree::
    :maxdepth: 2
 
+   release-notes/version-4.6.8
+   release-notes/version-4.6.7
+   release-notes/version-4.6.6
    release-notes/version-4.6.5
    release-notes/version-4.6.4
    release-notes/version-4.6.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/setup.py new/mod_wsgi-4.6.8/setup.py
--- old/mod_wsgi-4.6.5/setup.py 2018-10-22 06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/setup.py 2019-10-06 00:58:30.000000000 +0200
@@ -573,6 +573,8 @@
         'Programming Language :: Python :: 3.4',
         'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
+        'Programming Language :: Python :: 3.7',
+        'Programming Language :: Python :: 3.8',
         'Topic :: Internet :: WWW/HTTP :: WSGI',
         'Topic :: Internet :: WWW/HTTP :: WSGI :: Server'
     ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/__init__.py 
new/mod_wsgi-4.6.8/src/server/__init__.py
--- old/mod_wsgi-4.6.5/src/server/__init__.py   2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/__init__.py   2019-10-06 00:58:30.000000000 
+0200
@@ -9,7 +9,7 @@
 import signal
 import threading
 import atexit
-import imp
+import types
 import re
 import pprint
 import time
@@ -30,12 +30,15 @@
 _py_dylib = ''
 
 try:
-    import imp
     import sysconfig
     import distutils.sysconfig
 
     _py_soabi = sysconfig.get_config_var('SOABI')
-    _py_soext = sysconfig.get_config_var('SO')
+
+    _py_soext = sysconfig.get_config_var('EXT_SUFFIX')
+
+    if _py_soext is None:
+        _py_soext = sysconfig.get_config_var('SO')
 
     if (sysconfig.get_config_var('WITH_DYLD') and
             sysconfig.get_config_var('LIBDIR') and
@@ -104,10 +107,11 @@
     for name in mimetypes.knownfiles:
         if os.path.exists(name):
             return name
-            break
     else:
         return '/dev/null'
 
+SHELL = find_program(['bash', 'sh'], ['/usr/local/bin'])
+
 APACHE_GENERAL_CONFIG = """
 <IfModule !version_module>
 LoadModule version_module '${MOD_WSGI_MODULES_DIRECTORY}/mod_version.so'
@@ -435,6 +439,11 @@
 KeepAlive Off
 </IfDefine>
 
+<IfDefine MOD_WSGI_ENABLE_SENDFILE>
+EnableSendfile On
+WSGIEnableSendfile On
+</IfDefine>
+
 <IfDefine MOD_WSGI_COMPRESS_RESPONSES>
 AddOutputFilterByType DEFLATE text/plain
 AddOutputFilterByType DEFLATE text/html
@@ -1406,7 +1415,7 @@
             self.target = entry_point
 
         elif application_type != 'static':
-            self.module = imp.new_module('__wsgi__')
+            self.module = types.ModuleType('__wsgi__')
             self.module.__file__ = entry_point
 
             with open(entry_point, 'r') as fp:
@@ -1513,9 +1522,9 @@
         self.resources = {}
 
         for extension, script in resources:
-            extension_name = re.sub('[^\w]{1}', '_', extension)
+            extension_name = re.sub(r'[^\w]{1}', '_', extension)
             module_name = '__wsgi_resource%s__' % extension_name
-            module = imp.new_module(module_name)
+            module = types.ModuleType(module_name)
             module.__file__ = script
 
             with open(script, 'r') as fp:
@@ -1758,7 +1767,7 @@
         print(SERVER_METRICS_SCRIPT % options, file=fp)
 
 WSGI_CONTROL_SCRIPT = """
-#!/bin/bash
+#!%(shell_executable)s
 
 # %(sys_argv)s
 
@@ -2212,6 +2221,12 @@
             'being forcibly flushed. Defaults to 0 seconds indicating that '
             'it will default to the value of the \'socket-timeout\' option.'),
 
+    optparse.make_option('--enable-sendfile', action='store_true',
+            default=False, help='Flag indicating whether sendfile() support '
+            'should be enabled. Defaults to being disabled. This should '
+            'only be enabled if the operating system kernel and file system '
+            'type where files are hosted supports it.'),
+
     optparse.make_option('--reload-on-changes', action='store_true',
             default=False, help='Flag indicating whether worker processes '
             'should be automatically restarted when any Python code file '
@@ -2465,6 +2480,11 @@
             'unpacking of Python eggs. Defaults to a sub directory of '
             'the server root directory.'),
 
+    optparse.make_option('--shell-executable', default=SHELL,
+            metavar='FILE-PATH', help='Override the path to the shell '
+            'used in the \'apachectl\' script. The \'bash\' shell will '
+            'be used if available.'),
+
     optparse.make_option('--httpd-executable', default=apxs_config.HTTPD,
             metavar='FILE-PATH', help='Override the path to the Apache web '
             'server executable.'),
@@ -3232,6 +3252,9 @@
     if options['application_type'] == 'static':
         options['httpd_arguments_list'].append('-DMOD_WSGI_STATIC_ONLY')
 
+    if options['enable_sendfile']:
+        options['httpd_arguments_list'].append('-DMOD_WSGI_ENABLE_SENDFILE')
+
     if options['server_metrics']:
         options['httpd_arguments_list'].append('-DMOD_WSGI_SERVER_METRICS')
     if options['server_status']:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/mod_wsgi.c 
new/mod_wsgi-4.6.8/src/server/mod_wsgi.c
--- old/mod_wsgi-4.6.5/src/server/mod_wsgi.c    2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/mod_wsgi.c    2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -2063,8 +2063,6 @@
     PyObject *status_line_as_bytes = NULL;
     PyObject *headers_as_bytes = NULL;
 
-    PyObject *event = NULL;
-
     if (!self->r) {
         PyErr_SetString(PyExc_RuntimeError, "request object has expired");
         return NULL;
@@ -2110,17 +2108,31 @@
     if (wsgi_event_subscribers()) {
         WSGIThreadInfo *thread_info;
 
+        PyObject *event = NULL;
+        PyObject *value = NULL;
+
         thread_info = wsgi_thread_info(0, 0);
 
         event = PyDict_New();
 
+#if AP_MODULE_MAGIC_AT_LEAST(20100923,2)
+        if (self->r->log_id) {
+#if PY_MAJOR_VERSION >= 3
+           value = PyUnicode_DecodeLatin1(self->r->log_id,
+                                           strlen(self->r->log_id), NULL);
+#else
+           value = PyString_FromString(self->r->log_id);
+#endif
+            PyDict_SetItemString(event, "request_id", value);
+            Py_DECREF(value);
+        }
+#endif
+
         PyDict_SetItemString(event, "response_status", status_line);
         PyDict_SetItemString(event, "response_headers", headers);
         PyDict_SetItemString(event, "exception_info", exc_info);
 
-#if 0
         PyDict_SetItemString(event, "request_data", thread_info->request_data);
-#endif
 
         wsgi_publish_event("response_started", event);
 
@@ -3093,6 +3105,19 @@
 
         event = PyDict_New();
 
+#if AP_MODULE_MAGIC_AT_LEAST(20100923,2)
+        if (self->r->log_id) {
+#if PY_MAJOR_VERSION >= 3
+           value = PyUnicode_DecodeLatin1(self->r->log_id,
+                                           strlen(self->r->log_id), NULL);
+#else
+           value = PyString_FromString(self->r->log_id);
+#endif
+            PyDict_SetItemString(event, "request_id", value);
+            Py_DECREF(value);
+        }
+#endif
+
         value = wsgi_PyInt_FromLong(thread_handle->thread_id);
         PyDict_SetItemString(event, "thread_id", value);
         Py_DECREF(value);
@@ -3128,9 +3153,7 @@
         PyDict_SetItemString(event, "application_start", value);
         Py_DECREF(value);
 
-#if 0
         PyDict_SetItemString(event, "request_data", 
thread_handle->request_data);
-#endif
 
         wsgi_publish_event("request_started", event);
 
@@ -3299,6 +3322,19 @@
 
         event = PyDict_New();
 
+#if AP_MODULE_MAGIC_AT_LEAST(20100923,2)
+        if (self->r->log_id) {
+#if PY_MAJOR_VERSION >= 3
+           value = PyUnicode_DecodeLatin1(self->r->log_id,
+                                           strlen(self->r->log_id), NULL);
+#else
+           value = PyString_FromString(self->r->log_id);
+#endif
+            PyDict_SetItemString(event, "request_id", value);
+            Py_DECREF(value);
+        }
+#endif
+
         value = wsgi_PyInt_FromLongLong(self->input->reads);
         PyDict_SetItemString(event, "input_reads", value);
         Py_DECREF(value);
@@ -3378,9 +3414,7 @@
         PyDict_SetItemString(event, "application_time", value);
         Py_DECREF(value);
 
-#if 0
         PyDict_SetItemString(event, "request_data", 
thread_handle->request_data);
-#endif
 
         wsgi_publish_event("request_finished", event);
 
@@ -4345,8 +4379,15 @@
      * do it if Python was initialised in parent process.
      */
 
-    if (wsgi_python_initialized && !wsgi_python_after_fork)
+#ifdef HAVE_FORK
+    if (wsgi_python_initialized && !wsgi_python_after_fork) {
+#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7)
+        PyOS_AfterFork_Child();
+#else
         PyOS_AfterFork();
+#endif
+    }
+#endif
 
     /* Finalise any Python objects required by child process. */
 
@@ -6344,15 +6385,12 @@
                    apr_psprintf(r->pool, "%" APR_TIME_T_FMT, r->request_time));
 
 #if AP_MODULE_MAGIC_AT_LEAST(20100923,2)
-    if (!r->log_id || !r->connection->log_id) {
+    if (!r->log_id) {
         const char **id;
 
         /* Need to cast const away. */
 
-        if (r)
-            id = &((request_rec *)r)->log_id;
-        else
-            id = &((conn_rec *)c)->log_id;
+        id = &((request_rec *)r)->log_id;
 
         ap_run_generate_log_id(c, r, id);
     }
@@ -8510,6 +8548,9 @@
         ap_log_error(APLOG_MARK, APLOG_ALERT, errno, wsgi_server,
                      "mod_wsgi (pid=%d): Couldn't bind unix domain "
                      "socket '%s'.", getpid(), process->socket_path);
+
+        close(sockfd);
+
         return -1;
     }
 
@@ -8521,6 +8562,9 @@
         ap_log_error(APLOG_MARK, APLOG_ALERT, errno, wsgi_server,
                      "mod_wsgi (pid=%d): Couldn't listen on unix domain "
                      "socket.", getpid());
+
+        close(sockfd);
+
         return -1;
     }
 
@@ -8555,6 +8599,9 @@
                          "mod_wsgi (pid=%d): Couldn't change owner of unix "
                          "domain socket '%s' to uid=%ld.", getpid(),
                          process->socket_path, (long)socket_uid);
+
+            close(sockfd);
+
             return -1;
         }
     }
@@ -9441,8 +9488,8 @@
                 while (current) {
                     int lineno;
 
-                    char *filename = NULL;
-                    char *name = NULL;
+                    const char *filename = NULL;
+                    const char *name = NULL;
 
                     if (current->f_trace) {
                         lineno = current->f_lineno;
@@ -10422,6 +10469,14 @@
         wsgi_exit_daemon_process(0);
     }
 
+#ifdef HAVE_FORK
+    if (wsgi_python_initialized) {
+#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7)
+        PyOS_AfterFork_Parent();
+#endif
+    }
+#endif
+
     apr_pool_note_subprocess(p, &daemon->process, APR_KILL_AFTER_TIMEOUT);
     apr_proc_other_child_register(&daemon->process, wsgi_manage_process,
                                   daemon, NULL, p);
@@ -13093,6 +13148,7 @@
             if (queue_time > wsgi_daemon_process->group->queue_timeout) {
                 queue_timeout_occurred = 1;
 
+                r->status = HTTP_INTERNAL_SERVER_ERROR;
                 r->status_line = "200 Timeout";
 
                 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
@@ -13338,8 +13394,10 @@
         for (i = 0; i < wsgi_daemon_list->nelts; ++i) {
             entry = &entries[i];
 
-            close(entry->listener_fd);
-            entry->listener_fd = -1;
+            if (entry->listener_fd != -1) {
+                close(entry->listener_fd);
+                entry->listener_fd = -1;
+            }
         }
     }
 #endif
@@ -13751,8 +13809,8 @@
 
     if (trusted_proxy) {
         for (i=0; i<trusted_proxy_headers->nelts; i++) {
-            const char *name = NULL;
-            const char *value = NULL;
+            const char *name;
+            const char *value;
 
             name = ((const char**)trusted_proxy_headers->elts)[i];
             value = apr_table_get(r->subprocess_env, name);
@@ -13879,11 +13937,9 @@
          */
 
         for (i=0; i<trusted_proxy_headers->nelts; i++) {
-            const char *name = NULL;
-            const char *value = NULL;
+            const char *name;
 
             name = ((const char**)trusted_proxy_headers->elts)[i];
-            value = apr_table_get(r->subprocess_env, name);
 
             if (!strcmp(name, "HTTP_X_FORWARDED_FOR") ||
                      !strcmp(name, "HTTP_X_REAL_IP")) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_apache.c 
new/mod_wsgi-4.6.8/src/server/wsgi_apache.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_apache.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_apache.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_apache.h 
new/mod_wsgi-4.6.8/src/server/wsgi_apache.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_apache.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_apache.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_buckets.c 
new/mod_wsgi-4.6.8/src/server/wsgi_buckets.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_buckets.c        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_buckets.c        2019-10-06 
00:58:30.000000000 +0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_buckets.h 
new/mod_wsgi-4.6.8/src/server/wsgi_buckets.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_buckets.h        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_buckets.h        2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_convert.c 
new/mod_wsgi-4.6.8/src/server/wsgi_convert.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_convert.c        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_convert.c        2019-10-06 
00:58:30.000000000 +0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_convert.h 
new/mod_wsgi-4.6.8/src/server/wsgi_convert.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_convert.h        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_convert.h        2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_daemon.c 
new/mod_wsgi-4.6.8/src/server/wsgi_daemon.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_daemon.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_daemon.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_daemon.h 
new/mod_wsgi-4.6.8/src/server/wsgi_daemon.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_daemon.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_daemon.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_interp.c 
new/mod_wsgi-4.6.8/src/server/wsgi_interp.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_interp.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_interp.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -338,9 +338,10 @@
 
         PyThreadState_Swap(NULL);
 
-        tstate = tstate->interp->tstate_head;
+        tstate = PyInterpreterState_ThreadHead(tstate->interp);
+
         while (tstate) {
-            tstate_next = tstate->next;
+            tstate_next = PyThreadState_Next(tstate);
             if (tstate != tstate_save) {
                 PyThreadState_Swap(tstate);
                 PyThreadState_Clear(tstate);
@@ -436,9 +437,13 @@
      */
 
     if (!name) {
+#if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 7)
+        interp = PyInterpreterState_Main();
+#else
         interp = PyInterpreterState_Head();
-        while (interp->next)
-            interp = interp->next;
+        while (PyInterpreterState_Next(interp))
+            interp = PyInterpreterState_Next(interp);
+#endif
 
         name = "";
     }
@@ -1883,9 +1888,10 @@
 
         PyThreadState_Swap(NULL);
 
-        tstate = tstate->interp->tstate_head;
+        tstate = PyInterpreterState_ThreadHead(tstate->interp);
+
         while (tstate) {
-            tstate_next = tstate->next;
+            tstate_next = PyThreadState_Next(tstate);
             if (tstate != tstate_save) {
                 PyThreadState_Swap(tstate);
                 PyThreadState_Clear(tstate);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_interp.h 
new/mod_wsgi-4.6.8/src/server/wsgi_interp.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_interp.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_interp.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_logger.c 
new/mod_wsgi-4.6.8/src/server/wsgi_logger.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_logger.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_logger.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -700,14 +700,25 @@
 
                 event = PyDict_New();
 
+#if AP_MODULE_MAGIC_AT_LEAST(20100923,2)
+                if (r->log_id) {
+#if PY_MAJOR_VERSION >= 3
+                    object = PyUnicode_DecodeLatin1(r->log_id,
+                                                    strlen(r->log_id), NULL);
+#else
+                    object = PyString_FromString(r->log_id);
+#endif
+                    PyDict_SetItemString(event, "request_id", object);
+                    Py_DECREF(object);
+                }
+#endif
+
                 object = Py_BuildValue("(OOO)", type, value, traceback);
                 PyDict_SetItemString(event, "exception_info", object);
                 Py_DECREF(object);
 
-#if 0
                 PyDict_SetItemString(event, "request_data",
                                      thread_info->request_data);
-#endif
 
                 wsgi_publish_event("request_exception", event);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_logger.h 
new/mod_wsgi-4.6.8/src/server/wsgi_logger.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_logger.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_logger.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_memory.h 
new/mod_wsgi-4.6.8/src/server/wsgi_memory.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_memory.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_memory.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_metrics.c 
new/mod_wsgi-4.6.8/src/server/wsgi_metrics.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_metrics.c        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_metrics.c        2019-10-06 
00:58:30.000000000 +0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -713,7 +713,7 @@
         dict = PyModule_GetDict(module);
         list = PyDict_GetItemString(dict, "event_callbacks");
 
-        Py_INCREF(list);
+        Py_XINCREF(list);
 
         Py_DECREF(module);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_metrics.h 
new/mod_wsgi-4.6.8/src/server/wsgi_metrics.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_metrics.h        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_metrics.h        2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_python.h 
new/mod_wsgi-4.6.8/src/server/wsgi_python.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_python.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_python.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_restrict.c 
new/mod_wsgi-4.6.8/src/server/wsgi_restrict.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_restrict.c       2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_restrict.c       2019-10-06 
00:58:30.000000000 +0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_restrict.h 
new/mod_wsgi-4.6.8/src/server/wsgi_restrict.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_restrict.h       2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_restrict.h       2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_server.c 
new/mod_wsgi-4.6.8/src/server/wsgi_server.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_server.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_server.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_server.h 
new/mod_wsgi-4.6.8/src/server/wsgi_server.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_server.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_server.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_stream.c 
new/mod_wsgi-4.6.8/src/server/wsgi_stream.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_stream.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_stream.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_stream.h 
new/mod_wsgi-4.6.8/src/server/wsgi_stream.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_stream.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_stream.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_thread.c 
new/mod_wsgi-4.6.8/src/server/wsgi_thread.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_thread.c 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_thread.c 2019-10-06 00:58:30.000000000 
+0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2015 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_thread.h 
new/mod_wsgi-4.6.8/src/server/wsgi_thread.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_thread.h 2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_thread.h 2019-10-06 00:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_validate.c 
new/mod_wsgi-4.6.8/src/server/wsgi_validate.c
--- old/mod_wsgi-4.6.5/src/server/wsgi_validate.c       2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_validate.c       2019-10-06 
00:58:30.000000000 +0200
@@ -1,7 +1,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_validate.h 
new/mod_wsgi-4.6.8/src/server/wsgi_validate.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_validate.h       2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_validate.h       2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/src/server/wsgi_version.h 
new/mod_wsgi-4.6.8/src/server/wsgi_version.h
--- old/mod_wsgi-4.6.5/src/server/wsgi_version.h        2018-10-22 
06:01:30.000000000 +0200
+++ new/mod_wsgi-4.6.8/src/server/wsgi_version.h        2019-10-06 
00:58:30.000000000 +0200
@@ -4,7 +4,7 @@
 /* ------------------------------------------------------------------------- */
 
 /*
- * Copyright 2007-2018 GRAHAM DUMPLETON
+ * Copyright 2007-2019 GRAHAM DUMPLETON
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,8 +25,8 @@
 
 #define MOD_WSGI_MAJORVERSION_NUMBER 4
 #define MOD_WSGI_MINORVERSION_NUMBER 6
-#define MOD_WSGI_MICROVERSION_NUMBER 5
-#define MOD_WSGI_VERSION_STRING "4.6.5"
+#define MOD_WSGI_MICROVERSION_NUMBER 8
+#define MOD_WSGI_VERSION_STRING "4.6.8"
 
 /* ------------------------------------------------------------------------- */
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mod_wsgi-4.6.5/tests/events.wsgi 
new/mod_wsgi-4.6.8/tests/events.wsgi
--- old/mod_wsgi-4.6.5/tests/events.wsgi        2018-10-22 06:01:30.000000000 
+0200
+++ new/mod_wsgi-4.6.8/tests/events.wsgi        2019-10-06 00:58:30.000000000 
+0200
@@ -20,23 +20,14 @@
 def event_handler(name, **kwargs):
     print('EVENT', name, kwargs, os.getpid(), mod_wsgi.application_group)
     if name == 'request_started':
-        request = mod_wsgi.request_data()
-        print('REQUEST', request)
-        environ = kwargs['request_environ']
-        start_time = time.time()
-        request['start_time'] = start_time
         thread = threading.current_thread()
-        request['thread_name'] = thread.name
-        request['thread_id'] = thread.ident
+        request_data = kwargs['request_data']
+        request_data['thread_name'] = thread.name
+        request_data['thread_id'] = thread.ident
         return dict(application_object=wrapper(kwargs['application_object']))
     elif name == 'response_started':
-        request = mod_wsgi.request_data()
-        print('CONTENT', request)
-        print('ACTIVE', mod_wsgi.active_requests)
+        print('REQUESTS', mod_wsgi.active_requests)
     elif name == 'request_finished':
-        request = mod_wsgi.request_data()
-        print('REQUEST', request)
-        print('FINISH', time.time()-request['start_time'])
         print('PROCESS', mod_wsgi.process_metrics()) 
     elif name == 'request_exception':
         exception_info = kwargs['exception_info']


Reply via email to