Version 4.9.0

Version 4.9.0 of mod_wsgi can be obtained from:

Bugs Fixed

  • The mod_wsgi code wouldn’t compile on Python 3.10 as various Python C API functions were removed. Note that the changes required switching to alternate C APIs. The changes were made for all Python versions back to Python 3.6 and were not conditional on Python 3.10+ being used. This is why the minor version got bumped.
  • When using CMMI (configure/make/make install) method for compiling mod_wsgi if embedded mode was being disabled at compile time, compilation would fail.
  • When maximum-requests option was used with mod_wsgi daemon mode, and a graceful restart signal was sent to the daemon process while there was an active request, the process would only shutdown when the graceful timeout period had expired, and not as soon as any active requests had completed, if that had occurred before the graceful timeout had expired.
  • When using the startup-timeout and restart-interval options of WSGIDaemonProcess directive together, checking for the expiration time of the startup time was done incorrectly, resulting in process restart being delayed if startup had failed. At worst case this was the lessor of the time periods specified by the options restart-interval, deadlock-timeout, graceful-timeout and eviction-timeout. If request-timeout were defined it would however still be calculated correctly. As request-timeout was by default defined when using mod_wsgi-express, this issue only usually affect mod_wsgi when manually configuring Apache.

Features Changed

  • Historically when using embedded mode, wsgi.multithread in the WSGI environ dictionary has reported True when any multithread capable Apache MPM were used (eg., worker, event), even if the current number of configured threads per child process was overridden to be 1. Why this was the case has been forgotten, but generally wouldn’t matter since no one would ever set up Apache with a mulithread MPM and then configure the number of threads to be 1. If that was desired then prefork MPM would be used.

    With mod_wsgi-express since 4.8.0 making it much easier to use embedded mode and have a sane configuration used, since it is generated for you, the value of wsgi.multithread has been changed such that it will now correctly report False if using embedded mode, a multithread capable MPM is used, but the number of configured threads is set to 1.

  • The graceful-timeout option for WSGIDaemonProcess now defaults to 15 seconds. This was always the case when mod_wsgi-express was used but the default was never applied back to the case where mod_wsgi was being configured manually.

    A default of 15 seconds for graceful-timeout is being added to avoid the problem where sending a SIGUSR1 to a daemon mode process would never see the process shutdown due to there never being a time when there were no active requests. This might occur when there were a stuck request that never completed, or numerous long running requests which always overlapped in time meaning the process was never idle.

    You can still force graceful-timeout to be 0 to restore the original behaviour, but that is probably not recommended.