test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler
Fixes: rhbz#2355052
This commit is contained in:
parent
a48837eb4a
commit
234d41ca6b
2 changed files with 100 additions and 1 deletions
|
|
@ -0,0 +1,80 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: "Miss Islington (bot)"
|
||||
<31488909+miss-islington@users.noreply.github.com>
|
||||
Date: Mon, 11 Nov 2024 15:26:10 +0100
|
||||
Subject: [PATCH] 00458: test_ssl: Don't stop ThreadedEchoServer on OSError in
|
||||
ConnectionHandler
|
||||
|
||||
If `read()` in the ConnectionHandler thread raises `OSError` (except `ConnectionError`),
|
||||
the ConnectionHandler shuts down the entire ThreadedEchoServer,
|
||||
preventing further connections.
|
||||
It also does that for `EPROTOTYPE` in `wrap_conn`.
|
||||
|
||||
Make sure that the context manager *is* used, and remove the `server.stop()`
|
||||
calls from ConnectionHandler.
|
||||
|
||||
Backported from 3.12+:
|
||||
https://github.com/python/cpython/pull/126503
|
||||
|
||||
Co-authored-by: Petr Viktorin <encukou@gmail.com>
|
||||
---
|
||||
Lib/test/test_ssl.py | 17 ++++++++++++-----
|
||||
1 file changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
|
||||
index a1a581a907..0f1397de73 100644
|
||||
--- a/Lib/test/test_ssl.py
|
||||
+++ b/Lib/test/test_ssl.py
|
||||
@@ -2488,7 +2488,6 @@ def wrap_conn(self):
|
||||
# See also http://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/
|
||||
if e.errno != errno.EPROTOTYPE and sys.platform != "darwin":
|
||||
self.running = False
|
||||
- self.server.stop()
|
||||
self.close()
|
||||
return False
|
||||
else:
|
||||
@@ -2623,10 +2622,6 @@ def run(self):
|
||||
self.close()
|
||||
self.running = False
|
||||
|
||||
- # normally, we'd just stop here, but for the test
|
||||
- # harness, we want to stop the server
|
||||
- self.server.stop()
|
||||
-
|
||||
def __init__(self, certificate=None, ssl_version=None,
|
||||
certreqs=None, cacerts=None,
|
||||
chatty=True, connectionchatty=False, starttls_server=False,
|
||||
@@ -2660,21 +2655,33 @@ def __init__(self, certificate=None, ssl_version=None,
|
||||
self.conn_errors = []
|
||||
threading.Thread.__init__(self)
|
||||
self.daemon = True
|
||||
+ self._in_context = False
|
||||
|
||||
def __enter__(self):
|
||||
+ if self._in_context:
|
||||
+ raise ValueError('Re-entering ThreadedEchoServer context')
|
||||
+ self._in_context = True
|
||||
self.start(threading.Event())
|
||||
self.flag.wait()
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
+ assert self._in_context
|
||||
+ self._in_context = False
|
||||
self.stop()
|
||||
self.join()
|
||||
|
||||
def start(self, flag=None):
|
||||
+ if not self._in_context:
|
||||
+ raise ValueError(
|
||||
+ 'ThreadedEchoServer must be used as a context manager')
|
||||
self.flag = flag
|
||||
threading.Thread.start(self)
|
||||
|
||||
def run(self):
|
||||
+ if not self._in_context:
|
||||
+ raise ValueError(
|
||||
+ 'ThreadedEchoServer must be used as a context manager')
|
||||
self.sock.settimeout(1.0)
|
||||
self.sock.listen(5)
|
||||
self.active = True
|
||||
|
|
@ -17,7 +17,7 @@ URL: https://www.python.org/
|
|||
#global prerel ...
|
||||
%global upstream_version %{general_version}%{?prerel}
|
||||
Version: %{general_version}%{?prerel:~%{prerel}}
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: Python-2.0.1
|
||||
|
||||
|
||||
|
|
@ -334,6 +334,21 @@ Patch371: 00371-revert-bpo-1596321-fix-threading-_shutdown-for-the-main-thread-g
|
|||
# even when cross-compiling.
|
||||
Patch452: 00452-properly-apply-exported-cflags-for-dtrace-systemtap-builds.patch
|
||||
|
||||
# 00458 # ee47b2530c18d1e0b414f5a0738ddce28e7510f4
|
||||
# test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler
|
||||
#
|
||||
# If `read()` in the ConnectionHandler thread raises `OSError` (except `ConnectionError`),
|
||||
# the ConnectionHandler shuts down the entire ThreadedEchoServer,
|
||||
# preventing further connections.
|
||||
# It also does that for `EPROTOTYPE` in `wrap_conn`.
|
||||
#
|
||||
# Make sure that the context manager *is* used, and remove the `server.stop()`
|
||||
# calls from ConnectionHandler.
|
||||
#
|
||||
# Backported from 3.12+:
|
||||
# https://github.com/python/cpython/pull/126503
|
||||
Patch458: 00458-test_ssl-don-t-stop-threadedechoserver-on-oserror-in-connectionhandler.patch
|
||||
|
||||
# (New patches go here ^^^)
|
||||
#
|
||||
# When adding new patches to "python" and "python3" in Fedora, EL, etc.,
|
||||
|
|
@ -1620,6 +1635,10 @@ CheckPython optimized
|
|||
# ======================================================
|
||||
|
||||
%changelog
|
||||
* Wed Apr 16 2025 Charalampos Stratakis <cstratak@redhat.com> - 3.10.17-2
|
||||
- test_ssl: Don't stop ThreadedEchoServer on OSError in ConnectionHandler
|
||||
- Fixes: rhbz#2355052
|
||||
|
||||
* Wed Apr 09 2025 Miro Hrončok <mhroncok@redhat.com> - 3.10.17-1
|
||||
- Update to 3.10.17
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue