Compare commits

..

No commits in common. "rawhide" and "f38" have entirely different histories.

8 changed files with 101 additions and 663 deletions

12
.gitignore vendored
View file

@ -58,15 +58,3 @@
/uwsgi-docs-4e23afe.tar.gz
/2.0.25.1.tar.gz
/uwsgi-docs-8dcaacd.tar.gz
/2.0.26.tar.gz
/uwsgi-docs-59e6cd1.tar.gz
/2.0.27.tar.gz
/uwsgi-docs-c0f17cd.tar.gz
/2.0.28.tar.gz
/uwsgi-docs-9606cb0.tar.gz
/2.0.29.tar.gz
/uwsgi-docs-b9da5ea.tar.gz
/2.0.30.tar.gz
/uwsgi-docs-f728a25.tar.gz
/uwsgi-docs-5784c30.tar.gz
/2.0.31.tar.gz

View file

@ -35,6 +35,7 @@ plugins = airbrake,
notfound,
pam,
pty,
rack,
rawrouter,
redislog,
router_basicauth,

View file

@ -1,2 +1,2 @@
SHA512 (uwsgi-docs-5784c30.tar.gz) = 4f966da4a867e45043a0eb4a123b439c8ab1f7ce6e8b32d770545ff7fae586e4e7dd011106aa6ed0ec82a6c6192937e0fd12ed681443332205566fc329e11cd8
SHA512 (2.0.31.tar.gz) = d4d327f36455438e165298cb5a7d483c951f4acd3d834b46ceeda105bd3664792ead226b02e06db62e92c210544778119bf75a55d9d4f30f8fba896c7de51e6d
SHA512 (2.0.25.1.tar.gz) = 3b2a78917b129f5a2f38f3538e30b132e4cd6e270df55365ccc0dc6b94641a262af1484c62b252d0a24121eb68417cb061210e89e2b7885992ab4ffa07092119
SHA512 (uwsgi-docs-8dcaacd.tar.gz) = 03f520652becb4409e9cf5fe30a2ce5595693786a08dac9ee59e05a7ba29283dced45f2416e8ccf758b1064f3002e34d6ae9fa166af5eea5cdbc99aaaf36ec4f

View file

@ -1,41 +0,0 @@
diff -uNr a/core/master_utils.c b/core/master_utils.c
--- a/core/master_utils.c 2024-09-23 22:05:33.000000000 +0200
+++ b/core/master_utils.c 2024-10-14 19:57:00.233290804 +0200
@@ -54,12 +54,6 @@
uwsgi_detach_daemons();
- for (i = 1; i <= uwsgi.numproc; i++) {
- if (uwsgi.workers[i].pid > 0) {
- waitpid(uwsgi.workers[i].pid, &waitpid_status, 0);
- }
- }
-
for (i = 0; i < ushared->gateways_cnt; i++) {
if (ushared->gateways[i].pid > 0) {
kill(ushared->gateways[i].pid, SIGKILL);
diff -uNr a/core/uwsgi.c b/core/uwsgi.c
--- a/core/uwsgi.c 2024-09-23 22:05:33.000000000 +0200
+++ b/core/uwsgi.c 2024-10-14 19:57:00.134291181 +0200
@@ -1319,6 +1319,8 @@
// gracefully destroy
void gracefully_kill_them_all(int signum) {
+ int waitpid_status;
+
if (uwsgi_instance_is_dying) return;
uwsgi.status.gracefully_destroying = 1;
@@ -1341,6 +1343,12 @@
}
}
+
+ for (i = 1; i <= uwsgi.numproc; i++) {
+ if (uwsgi.workers[i].pid > 0) {
+ waitpid(uwsgi.workers[i].pid, &waitpid_status, 0);
+ }
+ }
uwsgi_destroy_processes();
}

View file

@ -1,5 +1,5 @@
# Documentation sources:
%global commit 5784c30866a94942a5200db4d5f6c2850afb1caa
%global commit 8dcaacd4900accea52939f5495bfffd0f7408ad1
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%global docrepo uwsgi-docs
@ -26,13 +26,12 @@
%bcond_without tuntap
%bcond_without zeromq
%bcond_without perl
%bcond_with perlcoro
%bcond_without perlcoro
%bcond_without glusterfs
%bcond_without php
%bcond_without pq
%bcond_without gloox
%bcond_without geoip
%bcond_without ruby_rack
# javapackages-tools retired (apache-ivy orphanage)
%bcond_with java
# Fedora httpd includes mod_proxy_uwsgi
@ -58,6 +57,41 @@
#Fedora endif
%endif
# Conditionally enable/disable some things in epel7
%if 0%{?rhel} == 7
# el7 does have java
%bcond_without java
%bcond_without python2
%bcond_without python3
%bcond_without python3_other
%bcond_without python3_greenlet
%bcond_without gloox
%bcond_without geoip
# This only exists on EL7
%bcond_without tcp_wrappers
# el7 doesn't have zeromq
%bcond_with zeromq
# el7 does have python-greenlet, but only on x86_64
%ifarch x86_64
%bcond_without python2_greenlet
%endif
%bcond_without perl
# el7 does have perl-Coro
%bcond_without perlcoro
# el7 httpd does not include mod_proxy_uwsgi
%bcond_without mod_proxy_uwsgi
# el7 can now build glusterfs but only on x86_64
%ifnarch x86_64
%bcond_with glusterfs
%else
%bcond_without glusterfs
%endif
# this fails in el7 not sure why
%bcond_with gridfs
# EL7 PHP is too old
%bcond_with php
%endif
# epel8 builds pretty similar to Fedora for now
%if 0%{?rhel} == 8
%bcond_without go
@ -73,7 +107,6 @@
%bcond_without pq
%bcond_without gloox
%bcond_without geoip
%bcond_without ruby_rack
# javapackages-tools retired (apache-ivy orphanage)
%bcond_with java
# Fedora httpd includes mod_proxy_uwsgi
@ -115,7 +148,6 @@
%bcond_with glusterfs
%bcond_without php
%bcond_without pq
%bcond_without ruby_rack
# EPEL9 doesn't have gloox yet
%bcond_with gloox
# EPEL9 doesn't have GeoIP yet
@ -143,88 +175,17 @@
%bcond_without gridfs
%endif
# EL9 has multiple python3 versions
%bcond_without python3_alternate1
%if %{with python3_alternate1}
%global python3_alternate1_pkgname python3.11
%global __python3_alternate1 python3.11
%global python3_alternate1_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate1} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")
%global python3_alternate1_version 3.11
%global python3_alternate1_version_nodots 311
%endif
%bcond_without python3_alternate2
%if %{with python3_alternate2}
%global python3_alternate2_pkgname python3.12
%global __python3_alternate2 python3.12
%global python3_alternate2_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate2} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")
%global python3_alternate2_version 3.12
%global python3_alternate2_version_nodots 312
%endif
%bcond_without python3_alternate3
%if %{with python3_alternate3}
%global python3_alternate3_pkgname python3.13
%global __python3_alternate3 python3.13
%global python3_alternate3_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate3} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")
%global python3_alternate3_version 3.13
%global python3_alternate3_version_nodots 313
%endif
#EL9 endif
%endif
%if 0%{?rhel} == 10
# EPEL10 does not have gcc-go
%bcond_with go
%bcond_without python3
# EPEL10 does not have python-greenlet-devel any more
%bcond_with python3_greenlet
%bcond_without ruby19
%bcond_without tuntap
# EPEL10 doesn't have zeromq yet
%bcond_with zeromq
%bcond_without perl
# EPEL10 doesn't have perl-Coro yet
%bcond_with perlcoro
# EPEL10 doesn't have glusterfs yet
%bcond_with glusterfs
%bcond_without php
%bcond_without pq
%bcond_without ruby_rack
# EPEL10 doesn't have gloox yet
%bcond_with gloox
# EPEL10 doesn't have GeoIP yet
%bcond_with geoip
# javapackages-tools retired (apache-ivy orphanage)
%bcond_with java
# Fedora httpd includes mod_proxy_uwsgi
# https://bugzilla.redhat.com/show_bug.cgi?id=1574335
%bcond_with mod_proxy_uwsgi
#mono
# EPEL10 doesn't have mono yet
%ifarch %{mono_arches}
%bcond_with mono
%else
%bcond_with mono
%endif
# mongodblibs
# mongo-cxx-driver-legacy broken in rawhide rhbz#1675407
%bcond_with mongodblibs
# v8-314 retired
%bcond_with v8
#mongodblibs dependency
%if %{without mongodblibs}
%bcond_with gridfs
%else
%bcond_without gridfs
%endif
# EL10 has multiple python3 versions
%bcond_without python3_alternate1
%if %{with python3_alternate1}
%global python3_alternate1_pkgname python3.12
%global __python3_alternate1 python3.12
%global python3_alternate1_sitelib %(RPM_BUILD_ROOT= %{__python3_alternate1} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")}
%global python3_alternate1_version 3.12
%global python3_alternate1_version_nodots 312
# EL9 has multiple python3 versions, but does not provide the
# convenience macros that EL7 has. Set those ourselves.
#
# This needs some serious rework after EL7 is gone.
%bcond_without python3_other
%if %{with python3_other}
%global python3_other_pkgversion 3.11
%global __python3_other python3.11
%global python3_other_sitelib %(RPM_BUILD_ROOT= %{__python3_other} -Ic "import sysconfig; print(sysconfig.get_path('purelib', vars={'platbase': '%{_prefix}', 'base': '%{_prefix}'}))")}
%global python3_other_version 3.11
%global python3_other_version_nodots 311
%endif
#EL9 endif
%endif
@ -241,14 +202,8 @@
%if %{with python3}
%global __python %{__python3}
%else
%if %{with python3_alternate1}
%global __python %{__python3_alternate1}
%else
%if %{with python3_alternate2}
%global __python %{__python3_alternate2}
%else
%if %{with python3_alternate3}
%global __python %{__python3_alternate3}
%if %{with python3_other}
%global __python %{__python3_other}
%else
%if %{with python2}
%global __python %{__python2}
@ -257,17 +212,14 @@
%endif
%endif
%endif
%endif
%endif
Name: uwsgi
Version: 2.0.31
Release: 5%{?dist}
Version: 2.0.25.1
Release: 1%{?dist}
Summary: Fast, self-healing, application container server
# uwsgi is licensed under GPLv2 with a linking exception
# docs are licensed under MIT
# Automatically converted from old format: GPLv2 with exceptions and MIT - review is highly recommended.
License: LicenseRef-Callaway-GPLv2-with-exceptions AND LicenseRef-Callaway-MIT
License: GPLv2 with exceptions and MIT
URL: https://github.com/unbit/uwsgi
ExcludeArch: %{ix86}
@ -279,7 +231,6 @@ Source3: emperor.ini
Source4: https://github.com/unbit/%{docrepo}/archive/%{commit}/%{docrepo}-%{shortcommit}.tar.gz
Source5: README.Fedora
Source7: uwsgi.tmpfiles
Source8: uwsgi.sysusers
# When adding patches please add to the end, don't
# reuse intermediate numbers
@ -296,7 +247,6 @@ Patch14: uwsgi_python312-2.patch
BuildRequires: curl, libxml2-devel, libuuid-devel, jansson-devel
BuildRequires: libyaml-devel, ruby-devel
BuildRequires: libxcrypt-devel
%if %{with tcp_wrappers}
BuildRequires: tcp_wrappers-devel
%endif
@ -312,19 +262,13 @@ BuildRequires: python%{python3_pkgversion}-devel
%if %{with python3_greenlet}
BuildRequires: python%{python3_pkgversion}-greenlet-devel
%endif
%if %{with python3_alternate1}
BuildRequires: %{python3_alternate1_pkgname}-devel
%endif
%if %{with python3_alternate2}
BuildRequires: %{python3_alternate2_pkgname}-devel
%endif
%if %{with python3_alternate3}
BuildRequires: %{python3_alternate3_pkgname}-devel
%if %{with python3_other}
BuildRequires: python%{python3_other_pkgversion}-devel
%endif
%if %{with glusterfs}
BuildRequires: glusterfs-devel, glusterfs-api-devel
%endif
BuildRequires: lua-devel, ruby, pcre2-devel
BuildRequires: lua-devel, ruby, pcre-devel
%if %{with php}
BuildRequires: php-devel, php-embedded
%endif
@ -387,6 +331,7 @@ Obsoletes: uwsgi-routers <= 2.0.6
Obsoletes: uwsgi-plugin-erlang <= 1.9.20-1
Obsoletes: uwsgi-plugin-admin <= 2.0.6
Requires(pre): shadow-utils
%{?systemd_requires}
%filter_requires_in %{_usrsrc}
@ -443,36 +388,14 @@ The uwsgidecorators Python %{python3_version} module provides higher-level
access to the uWSGI API.
%endif
%if %{with python3_alternate1}
%package -n %{python3_alternate1_pkgname}-uwsgidecorators
Summary: Python %{python3_alternate1_version} decorators providing access to the uwsgi API
%if %{with python3_other}
%package -n python%{python3_other_pkgversion}-uwsgidecorators
Summary: Python %{python3_other_version} decorators providing access to the uwsgi API
Requires: uwsgi = %{version}-%{release}
Requires: uwsgi-plugin-python%{python3_alternate1_version_nodots} = %{version}-%{release}
Requires: uwsgi-plugin-python%{python3_other_version_nodots} = %{version}-%{release}
%description -n %{python3_alternate1_pkgname}-uwsgidecorators
The uwsgidecorators Python %{python3_alternate1_version} module provides
higher-level access to the uWSGI API.
%endif
%if %{with python3_alternate2}
%package -n %{python3_alternate2_pkgname}-uwsgidecorators
Summary: Python %{python3_alternate2_version} decorators providing access to the uwsgi API
Requires: uwsgi = %{version}-%{release}
Requires: uwsgi-plugin-python%{python3_alternate2_version_nodots} = %{version}-%{release}
%description -n %{python3_alternate2_pkgname}-uwsgidecorators
The uwsgidecorators Python %{python3_alternate2_version} module provides
higher-level access to the uWSGI API.
%endif
%if %{with python3_alternate3}
%package -n %{python3_alternate3_pkgname}-uwsgidecorators
Summary: Python %{python3_alternate3_version} decorators providing access to the uwsgi API
Requires: uwsgi = %{version}-%{release}
Requires: uwsgi-plugin-python%{python3_alternate3_version_nodots} = %{version}-%{release}
%description -n %{python3_alternate3_pkgname}-uwsgidecorators
The uwsgidecorators Python %{python3_alternate3_version} module provides
%description -n python%{python3_other_pkgversion}-uwsgidecorators
The uwsgidecorators Python %{python3_other_version} module provides
higher-level access to the uWSGI API.
%endif
@ -770,14 +693,12 @@ Requires: uwsgi-plugin-common = %{version}-%{release}
%description -n uwsgi-plugin-dummy
This package contains the dummy plugin for uWSGI
%if %{with ruby_rack}
%package -n uwsgi-plugin-fiber
Summary: uWSGI - Plugin for Ruby Fiber support
Requires: uwsgi-plugin-common = %{version}-%{release}, uwsgi-plugin-rack = %{version}-%{release}
%description -n uwsgi-plugin-fiber
This package contains the fiber plugin for uWSGI
%endif
%if %{with go}
%package -n uwsgi-plugin-gccgo
@ -817,31 +738,13 @@ Requires: uwsgi-plugin-python%{python3_pkgversion} = %{version}-%{release}
This package contains the Python %{python3_version} gevent plugin for uWSGI
%endif
%if %{with python3_alternate1}
%package -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent
Summary: uWSGI - Plugin for Python %{python3_alternate1_version} GEvent support
Requires: uwsgi-plugin-python%{python3_alternate1_version_nodots} = %{version}-%{release}, libevent
%if %{with python3_other}
%package -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent
Summary: uWSGI - Plugin for Python %{python3_other_version} GEvent support
Requires: uwsgi-plugin-python%{python3_other_version_nodots} = %{version}-%{release}, libevent
%description -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent
This package contains the Python %{python3_alternate1_version} gevent plugin for uWSGI
%endif
%if %{with python3_alternate2}
%package -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent
Summary: uWSGI - Plugin for Python %{python3_alternate2_version} GEvent support
Requires: uwsgi-plugin-python%{python3_alternate2_version_nodots} = %{version}-%{release}, libevent
%description -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent
This package contains the Python %{python3_alternate2_version} gevent plugin for uWSGI
%endif
%if %{with python3_alternate3}
%package -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent
Summary: uWSGI - Plugin for Python %{python3_alternate3_version} GEvent support
Requires: uwsgi-plugin-python%{python3_alternate3_version_nodots} = %{version}-%{release}, libevent
%description -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent
This package contains the Python %{python3_alternate3_version} gevent plugin for uWSGI
%description -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent
This package contains the Python %{python3_other_version} gevent plugin for uWSGI
%endif
%if %{with glusterfs}
@ -994,41 +897,21 @@ Provides: uwsgi-plugin-python3 = %{version}-%{release}
This package contains the Python %{python3_version} plugin for uWSGI
%endif
%if %{with python3_alternate1}
%package -n uwsgi-plugin-python%{python3_alternate1_version_nodots}
Summary: uWSGI - Plugin for Python %{python3_alternate1_version} support
Requires: %{python3_alternate1_pkgname}, uwsgi-plugin-common = %{version}-%{release}
%if %{with python3_other}
%package -n uwsgi-plugin-python%{python3_other_version_nodots}
Summary: uWSGI - Plugin for Python %{python3_other_version} support
Requires: python%{python3_other_pkgversion}, uwsgi-plugin-common = %{version}-%{release}
%description -n uwsgi-plugin-python%{python3_alternate1_version_nodots}
This package contains the Python %{python3_alternate1_version} plugin for uWSGI
%description -n uwsgi-plugin-python%{python3_other_version_nodots}
This package contains the Python %{python3_other_version} plugin for uWSGI
%endif
%if %{with python3_alternate2}
%package -n uwsgi-plugin-python%{python3_alternate2_version_nodots}
Summary: uWSGI - Plugin for Python %{python3_alternate2_version} support
Requires: %{python3_alternate2_pkgname}, uwsgi-plugin-common = %{version}-%{release}
%description -n uwsgi-plugin-python%{python3_alternate2_version_nodots}
This package contains the Python %{python3_alternate2_version} plugin for uWSGI
%endif
%if %{with python3_alternate3}
%package -n uwsgi-plugin-python%{python3_alternate3_version_nodots}
Summary: uWSGI - Plugin for Python %{python3_alternate3_version} support
Requires: %{python3_alternate3_pkgname}, uwsgi-plugin-common = %{version}-%{release}
%description -n uwsgi-plugin-python%{python3_alternate3_version_nodots}
This package contains the Python %{python3_alternate3_version} plugin for uWSGI
%endif
%if %{with ruby_rack}
%package -n uwsgi-plugin-rack
Summary: uWSGI - Ruby rack plugin
Requires: rubygem-rack, uwsgi-plugin-common = %{version}-%{release}
%description -n uwsgi-plugin-rack
This package contains the rack plugin for uWSGI
%endif
%package -n uwsgi-plugin-rbthreads
Summary: uWSGI - Ruby native threads support plugin
@ -1397,17 +1280,9 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py --
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_pkgversion}_gevent
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3} uwsgiconfig.py --verbose --plugin plugins/tornado fedora python%{python3_pkgversion}_tornado
%endif
%if %{with python3_alternate1}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate1} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate1_version_nodots}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate1} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate1_version_nodots}_gevent
%endif
%if %{with python3_alternate2}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate2} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate2_version_nodots}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate2} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate2_version_nodots}_gevent
%endif
%if %{with python3_alternate3}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate3} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_alternate3_version_nodots}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_alternate3} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_alternate3_version_nodots}_gevent
%if %{with python3_other}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_other} uwsgiconfig.py --verbose --plugin plugins/python fedora python%{python3_other_version_nodots}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python3_other} uwsgiconfig.py --verbose --plugin plugins/gevent fedora python%{python3_other_version_nodots}_gevent
%endif
%if %{with mongodblibs}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/mongodblog fedora
@ -1433,9 +1308,7 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --v
%endif
%endif
%if %{with ruby19}
%if %{with ruby_rack}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/fiber fedora
%endif
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/rbthreads fedora
%endif
%if %{with tuntap}
@ -1475,9 +1348,6 @@ CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --v
%if %{with geoip}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/geoip fedora
%endif
%if %{with ruby_rack}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/rack fedora
%endif
%if %{with tcp_wrappers}
CFLAGS="%{optflags} -Wno-unused-but-set-variable" %{__python} uwsgiconfig.py --verbose --plugin plugins/router_access fedora
%endif
@ -1521,22 +1391,10 @@ install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_sitelib}/uwsgidec
%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/uwsgidecorators.py
%endif
%endif
%if %{with python3_alternate1}
install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate1_sitelib}/uwsgidecorators.py
%if %{with python3_other}
install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_other_sitelib}/uwsgidecorators.py
%if %{manual_py_compile} == 1
%py_byte_compile %{__python3_alternate1} %{buildroot}%{python3_alternate1_sitelib}/uwsgidecorators.py
%endif
%endif
%if %{with python3_alternate2}
install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate2_sitelib}/uwsgidecorators.py
%if %{manual_py_compile} == 1
%py_byte_compile %{__python3_alternate2} %{buildroot}%{python3_alternate2_sitelib}/uwsgidecorators.py
%endif
%endif
%if %{with python3_alternate3}
install -D -p -m 0644 uwsgidecorators.py %{buildroot}%{python3_alternate3_sitelib}/uwsgidecorators.py
%if %{manual_py_compile} == 1
%py_byte_compile %{__python3_alternate3} %{buildroot}%{python3_alternate3_sitelib}/uwsgidecorators.py
%py_byte_compile %{__python3_other} %{buildroot}%{python3_other_sitelib}/uwsgidecorators.py
%endif
%endif
%if %{with java}
@ -1552,7 +1410,13 @@ install -D -p -m 0644 %{SOURCE7} %{buildroot}%{_tmpfilesdir}/uwsgi.conf
install -D -p -m 0755 apache2/.libs/mod_proxy_uwsgi.so %{buildroot}%{_httpd_moddir}/mod_proxy_uwsgi.so
%endif
install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%pre
getent group uwsgi >/dev/null || groupadd -r uwsgi
getent passwd uwsgi >/dev/null || \
useradd -r -g uwsgi -d /run/uwsgi -s /sbin/nologin \
-c "uWSGI daemon user" uwsgi
exit 0
%post
%systemd_post uwsgi.service
@ -1572,7 +1436,6 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%dir %{_sysconfdir}/uwsgi.d
%doc README README.Fedora CHANGELOG
%license LICENSE
%{_sysusersdir}/uwsgi.conf
%files -n uwsgi-devel
%{_includedir}/uwsgi
@ -1589,22 +1452,10 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%{python3_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_version_nodots}*.py*
%endif
%if %{with python3_alternate1}
%files -n %{python3_alternate1_pkgname}-uwsgidecorators
%{python3_alternate1_sitelib}/uwsgidecorators.py
%{python3_alternate1_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate1_version_nodots}*.py*
%endif
%if %{with python3_alternate2}
%files -n %{python3_alternate2_pkgname}-uwsgidecorators
%{python3_alternate2_sitelib}/uwsgidecorators.py
%{python3_alternate2_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate2_version_nodots}*.py*
%endif
%if %{with python3_alternate3}
%files -n %{python3_alternate3_pkgname}-uwsgidecorators
%{python3_alternate3_sitelib}/uwsgidecorators.py
%{python3_alternate3_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_alternate3_version_nodots}*.py*
%if %{with python3_other}
%files -n python%{python3_other_pkgversion}-uwsgidecorators
%{python3_other_sitelib}/uwsgidecorators.py
%{python3_other_sitelib}/__pycache__/uwsgidecorators.cpython-%{python3_other_version_nodots}*.py*
%endif
%files -n uwsgi-docs
@ -1743,11 +1594,9 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%{_libdir}/uwsgi/dummy_plugin.so
%if %{with ruby19}
%if %{with ruby_rack}
%files -n uwsgi-plugin-fiber
%{_libdir}/uwsgi/fiber_plugin.so
%endif
%endif
%if %{with go}
%files -n uwsgi-plugin-gccgo
@ -1769,19 +1618,9 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%{_libdir}/uwsgi/python%{python3_pkgversion}_gevent_plugin.so
%endif
%if %{with python3_alternate1}
%files -n uwsgi-plugin-python%{python3_alternate1_version_nodots}-gevent
%{_libdir}/uwsgi/python%{python3_alternate1_version_nodots}_gevent_plugin.so
%endif
%if %{with python3_alternate2}
%files -n uwsgi-plugin-python%{python3_alternate2_version_nodots}-gevent
%{_libdir}/uwsgi/python%{python3_alternate2_version_nodots}_gevent_plugin.so
%endif
%if %{with python3_alternate3}
%files -n uwsgi-plugin-python%{python3_alternate3_version_nodots}-gevent
%{_libdir}/uwsgi/python%{python3_alternate3_version_nodots}_gevent_plugin.so
%if %{with python3_other}
%files -n uwsgi-plugin-python%{python3_other_version_nodots}-gevent
%{_libdir}/uwsgi/python%{python3_other_version_nodots}_gevent_plugin.so
%endif
%if %{with glusterfs}
@ -1858,25 +1697,13 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%{_libdir}/uwsgi/python%{python3_pkgversion}_plugin.so
%endif
%if %{with python3_alternate1}
%files -n uwsgi-plugin-python%{python3_alternate1_version_nodots}
%{_libdir}/uwsgi/python%{python3_alternate1_version_nodots}_plugin.so
%if %{with python3_other}
%files -n uwsgi-plugin-python%{python3_other_version_nodots}
%{_libdir}/uwsgi/python%{python3_other_version_nodots}_plugin.so
%endif
%if %{with python3_alternate2}
%files -n uwsgi-plugin-python%{python3_alternate2_version_nodots}
%{_libdir}/uwsgi/python%{python3_alternate2_version_nodots}_plugin.so
%endif
%if %{with python3_alternate3}
%files -n uwsgi-plugin-python%{python3_alternate3_version_nodots}
%{_libdir}/uwsgi/python%{python3_alternate3_version_nodots}_plugin.so
%endif
%if %{with ruby_rack}
%files -n uwsgi-plugin-rack
%{_libdir}/uwsgi/rack_plugin.so
%endif
%if %{with ruby19}
%files -n uwsgi-plugin-rbthreads
@ -2030,116 +1857,6 @@ install -m0644 -D %{SOURCE8} %{buildroot}%{_sysusersdir}/uwsgi.conf
%changelog
* Sun Jan 11 2026 Ralf Ertzinger <ralf@skytale.net> - 2.0.31-5
- Rebuild for new gccgo libraries
* Thu Jan 08 2026 Mamoru TASAKA <mtasaka@fedoraproject.org> - 2.0.31-4
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_4.0
* Wed Nov 26 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.31-3
- Fix path errors for EPEL9 uwsgidecorator packages
* Wed Oct 15 2025 Remi Collet <remi@remirepo.net> - 2.0.31-2
- rebuild for https://fedoraproject.org/wiki/Changes/php85
* Sun Oct 12 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.31-1
- Update to 2.0.31, drop merged patches
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 2.0.30-7
- Rebuilt for Python 3.14.0rc3 bytecode
* Tue Aug 19 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.30-6
- Add python3.13 module for EL9
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 2.0.30-5
- Rebuilt for Python 3.14.0rc2 bytecode
* Thu Jul 24 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.30-4
- Disable perl-Coro for rawhide, as this blocks rebuilding
for perl 5.42 (see https://bugzilla.redhat.com/show_bug.cgi?id=2379448)
* Tue Jul 08 2025 Jitka Plesnikova <jplesnik@redhat.com> - 2.0.30-3
- Perl 5.42 rebuild
* Mon Jun 09 2025 Python Maint <python-maint@redhat.com> - 2.0.30-2
- Rebuilt for Python 3.14
* Sun Jun 08 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.30-1
- Update to 2.0.30
* Tue Jun 03 2025 Python Maint <python-maint@redhat.com> - 2.0.29-2
- Rebuilt for Python 3.14
* Sat Apr 12 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.29-1
- Update to 2.0.29
* Mon Mar 24 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.28-7
- Rebuild for new libgo
* Tue Feb 11 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.0.28-6
- Add sysusers.d config file to allow rpm to create users/groups automatically
* Sat Feb 01 2025 Björn Esser <besser82@fedoraproject.org> - 2.0.28-5
- Add explicit BR: libxcrypt-devel
* Fri Jan 24 2025 Ralf Ertzinger <ralf@skytale.net> - 2.0.28-4
- Fix type errors flagged by GCC15
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.28-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Jan 08 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 2.0.28-2
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.4
* Sun Oct 27 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.28-1
- Update to 2.0.28, drop merged patches
* Tue Oct 22 2024 Richard W.M. Jones <rjones@redhat.com> - 2.0.27-5
- Rebuild for Jansson 2.14
(https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/3PYINSQGKQ4BB25NQUI2A2UCGGLAG5ND/)
* Mon Oct 14 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.27-4
- Fix uWSGI auto-reloading on config change
* Mon Oct 14 2024 Remi Collet <remi@fedoraproject.org> - 2.0.27-3
- rebuild for https://fedoraproject.org/wiki/Changes/php84
* Fri Sep 27 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.27-2
- Only build fiber plugin when rack plugin is also built
* Tue Sep 24 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.27-1
- Update to 2.0.27
- Drop merged patches
- Re-enable rack plugin for EPEL10, dependencies now present
* Sun Sep 22 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.26-8
- Disable building the Ruby rack plugin for EPEL10
* Wed Sep 04 2024 Miroslav Suchý <msuchy@redhat.com> - 2.0.26-7
- convert license to SPDX
* Wed Sep 04 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.26-6
- Drop support for EL7
- Add support for EL10
- Explicitly require pcre2 (all builds already pulled this
in anyway)
* Tue Aug 13 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.26-5
- Add patch for python 3.13
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.26-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Wed Jun 12 2024 Jitka Plesnikova <jplesnik@redhat.com> - 2.0.26-3
- Perl 5.40 rebuild
* Sat Jun 08 2024 Python Maint <python-maint@redhat.com> - 2.0.26-2
- Rebuilt for Python 3.13
* Sat Jun 01 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.26-1
- Update to 2.0.26
- Rework support for multiple python versions
* Tue Apr 16 2024 Ralf Ertzinger <ralf@skytale.net> - 2.0.25.1-1
- Update to 2.0.25.1, drop merged patches
- Use github.com as source for the main tarball

View file

@ -1 +0,0 @@
u uwsgi - 'uWSGI daemon user' /run/uwsgi -

View file

@ -1,33 +0,0 @@
diff -uNr a/plugins/pty/pty.c b/plugins/pty/pty.c
--- a/plugins/pty/pty.c 2024-10-26 11:59:26.000000000 +0200
+++ b/plugins/pty/pty.c 2025-01-24 20:04:55.952597269 +0100
@@ -259,7 +259,7 @@
}
-static void uwsgi_pty_winch() {
+static void uwsgi_pty_winch(int signum) {
// 2 uwsgi packets
char uwsgi_pkt[8];
#ifdef TIOCGWINSZ
@@ -309,7 +309,7 @@
if (upty.uremote) {
signal(SIGWINCH, uwsgi_pty_winch);
// send current terminal size
- uwsgi_pty_winch();
+ uwsgi_pty_winch(0);
}
upty.queue = event_queue_init();
diff -uNr a/plugins/tuntap/tuntap.c b/plugins/tuntap/tuntap.c
--- a/plugins/tuntap/tuntap.c 2024-10-26 11:59:26.000000000 +0200
+++ b/plugins/tuntap/tuntap.c 2025-01-24 20:33:49.513449322 +0100
@@ -409,7 +409,7 @@
}
}
-static void uwsgi_tuntap_router() {
+static void uwsgi_tuntap_router(int (*_)(void *), char ** __) {
if (!utt.routers) return;

View file

@ -1,193 +0,0 @@
diff -uNr a/core/init.c b/core/init.c
--- a/core/init.c 2024-06-01 20:40:38.000000000 +0200
+++ b/core/init.c 2024-08-13 09:56:13.152870522 +0200
@@ -432,8 +432,8 @@
uwsgi.cores = uwsgi.async;
}
+ uwsgi.has_threads = 1;
if (uwsgi.threads > 1) {
- uwsgi.has_threads = 1;
uwsgi.cores = uwsgi.threads;
}
diff -uNr a/core/uwsgi.c b/core/uwsgi.c
--- a/core/uwsgi.c 2024-06-01 20:40:38.000000000 +0200
+++ b/core/uwsgi.c 2024-08-13 09:56:13.156870522 +0200
@@ -197,7 +197,7 @@
{"freebind", no_argument, 0, "put socket in freebind mode", uwsgi_opt_true, &uwsgi.freebind, 0},
#endif
{"map-socket", required_argument, 0, "map sockets to specific workers", uwsgi_opt_add_string_list, &uwsgi.map_socket, 0},
- {"enable-threads", no_argument, 'T', "enable threads", uwsgi_opt_true, &uwsgi.has_threads, 0},
+ {"enable-threads", no_argument, 'T', "enable threads (stub option this is true by default)", uwsgi_opt_true, &uwsgi.has_threads, 0},
{"no-threads-wait", no_argument, 0, "do not wait for threads cancellation on quit/reload", uwsgi_opt_true, &uwsgi.no_threads_wait, 0},
{"auto-procname", no_argument, 0, "automatically set processes name to something meaningful", uwsgi_opt_true, &uwsgi.auto_procname, 0},
diff -uNr a/.github/workflows/test.yml b/.github/workflows/test.yml
--- a/.github/workflows/test.yml 2024-06-01 20:40:38.000000000 +0200
+++ b/.github/workflows/test.yml 2024-08-13 09:56:13.152870522 +0200
@@ -37,7 +37,7 @@
runs-on: ubuntu-20.04
strategy:
matrix:
- python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
+ python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
test-suite: [python, deadlocks]
steps:
- name: Add deadnakes ppa
diff -uNr a/plugins/python/python_plugin.c b/plugins/python/python_plugin.c
--- a/plugins/python/python_plugin.c 2024-08-13 09:55:30.374870522 +0200
+++ b/plugins/python/python_plugin.c 2024-08-13 10:00:36.315870522 +0200
@@ -406,7 +406,7 @@
// reset python signal flags so child processes can trap signals
// Necessary if uwsgi fork hooks not called to update interpreter state
if (!up.call_uwsgi_fork_hooks && up.call_osafterfork) {
-#ifdef HAS_NOT_PyOS_AfterFork_Child
+#ifdef HAS_NOT_PYOS_FORK_STABLE_API
PyOS_AfterFork();
#else
PyOS_AfterFork_Child();
@@ -1340,11 +1340,10 @@
// Acquire the gil and import lock before forking in order to avoid
// deadlocks in workers
UWSGI_GET_GIL
-#if defined UWSGI_PY312
- PyInterpreterState *interp = PyInterpreterState_Get();
- _PyImport_AcquireLock(interp);
-#else
+#ifdef HAS_NOT_PYOS_FORK_STABLE_API
_PyImport_AcquireLock();
+#else
+ PyOS_BeforeFork();
#endif
}
}
@@ -1357,17 +1356,16 @@
if (uwsgi.has_threads) {
if (step == 0) {
// Release locks within master process
-#if defined UWSGI_PY312
- PyInterpreterState *interp = PyInterpreterState_Get();
- _PyImport_ReleaseLock(interp);
-#else
+#ifdef HAS_NOT_PYOS_FORK_STABLE_API
_PyImport_ReleaseLock();
+#else
+ PyOS_AfterFork_Parent();
#endif
UWSGI_RELEASE_GIL
}
else {
// Ensure thread state and locks are cleaned up in child process
-#ifdef HAS_NOT_PyOS_AfterFork_Child
+#ifdef HAS_NOT_PYOS_FORK_STABLE_API
PyOS_AfterFork();
#else
PyOS_AfterFork_Child();
@@ -1618,7 +1616,11 @@
PyGILState_Release(pgst);
if (wsgi_req) {
-#ifdef UWSGI_PY312
+#ifdef UWSGI_PY313
+ up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining;
+ up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining;
+ up.current_frame[wsgi_req->async_id] = tstate->current_frame;
+#elif defined UWSGI_PY312
up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining;
up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining;
up.current_frame[wsgi_req->async_id] = tstate->cframe;
@@ -1631,7 +1633,11 @@
#endif
}
else {
-#ifdef UWSGI_PY312
+#ifdef UWSGI_PY313
+ up.current_main_c_recursion_remaining = tstate->c_recursion_remaining;
+ up.current_main_py_recursion_remaining = tstate->py_recursion_remaining;
+ up.current_main_frame = tstate->current_frame;
+#elif defined UWSGI_PY312
up.current_main_c_recursion_remaining = tstate->c_recursion_remaining;
up.current_main_py_recursion_remaining = tstate->py_recursion_remaining;
up.current_main_frame = tstate->cframe;
@@ -1871,7 +1877,11 @@
PyGILState_Release(pgst);
if (wsgi_req) {
-#ifdef UWSGI_PY312
+#ifdef UWSGI_PY313
+ tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id];
+ tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id];
+ tstate->current_frame = up.current_frame[wsgi_req->async_id];
+#elif defined UWSGI_PY312
tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id];
tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id];
tstate->cframe = up.current_frame[wsgi_req->async_id];
@@ -1884,7 +1894,11 @@
#endif
}
else {
-#ifdef UWSGI_PY312
+#ifdef UWSGI_PY313
+ tstate->c_recursion_remaining = up.current_main_c_recursion_remaining;
+ tstate->py_recursion_remaining = up.current_main_py_recursion_remaining;
+ tstate->current_frame = up.current_main_frame;
+#elif defined UWSGI_PY312
tstate->c_recursion_remaining = up.current_main_c_recursion_remaining;
tstate->py_recursion_remaining = up.current_main_py_recursion_remaining;
tstate->cframe = up.current_main_frame;
@@ -2098,7 +2112,7 @@
// ensure signals can be used again from python
// Necessary if fork hooks have been not used to update interpreter state
if (!up.call_osafterfork && !up.call_uwsgi_fork_hooks)
-#ifdef HAS_NOT_PyOS_AfterFork_Child
+#ifdef HAS_NOT_PYOS_FORK_STABLE_API
PyOS_AfterFork();
#else
PyOS_AfterFork_Child();
diff -uNr a/plugins/python/uwsgi_python.h b/plugins/python/uwsgi_python.h
--- a/plugins/python/uwsgi_python.h 2024-06-01 20:40:38.000000000 +0200
+++ b/plugins/python/uwsgi_python.h 2024-08-13 10:04:58.492870522 +0200
@@ -25,6 +25,10 @@
# define UWSGI_PY312
#endif
+#if (PY_VERSION_HEX >= 0x030d0000)
+# define UWSGI_PY313
+#endif
+
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 7
#define HAS_NOT_PyMemoryView_FromBuffer
#endif
@@ -41,12 +45,8 @@
#define HAS_NO_ERRORS_IN_PyFile_FromFd
#endif
-#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7
-#define HAS_NOT_PyOS_AfterFork_Child
-#endif
-
-#if PY_MAJOR_VERSION < 3
-#define HAS_NOT_PyOS_AfterFork_Child
+#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7) || PY_MAJOR_VERSION < 3
+#define HAS_NOT_PYOS_FORK_STABLE_API
#endif
#if PY_MAJOR_VERSION > 2
@@ -172,7 +172,15 @@
char *callable;
-#ifdef UWSGI_PY312
+#ifdef UWSGI_PY313
+ int *current_c_recursion_remaining;
+ int *current_py_recursion_remaining;
+ struct _PyInterpreterFrame **current_frame;
+
+ int current_main_c_recursion_remaining;
+ int current_main_py_recursion_remaining;
+ struct _PyInterpreterFrame *current_main_frame;
+#elif defined UWSGI_PY312
int *current_c_recursion_remaining;
int *current_py_recursion_remaining;
_PyCFrame **current_frame;