Index: gevent-25.4.2/src/greentest/3.11/test_ssl.py =================================================================== --- gevent-25.4.2.orig/src/greentest/3.11/test_ssl.py +++ gevent-25.4.2/src/greentest/3.11/test_ssl.py @@ -2492,7 +2492,6 @@ class ThreadedEchoServer(threading.Threa # 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: @@ -2627,10 +2626,6 @@ class ThreadedEchoServer(threading.Threa 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, @@ -2664,21 +2659,33 @@ class ThreadedEchoServer(threading.Threa 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 Index: gevent-25.4.2/src/greentest/3.10/test_ssl.py =================================================================== --- gevent-25.4.2.orig/src/greentest/3.10/test_ssl.py +++ gevent-25.4.2/src/greentest/3.10/test_ssl.py @@ -2485,7 +2485,6 @@ class ThreadedEchoServer(threading.Threa # 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: @@ -2620,9 +2619,6 @@ class ThreadedEchoServer(threading.Threa 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, @@ -2657,21 +2653,33 @@ class ThreadedEchoServer(threading.Threa 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 Index: gevent-25.4.2/src/greentest/3.12/test_ssl.py =================================================================== --- gevent-25.4.2.orig/src/greentest/3.12/test_ssl.py +++ gevent-25.4.2/src/greentest/3.12/test_ssl.py @@ -2300,7 +2300,6 @@ class ThreadedEchoServer(threading.Threa # 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: @@ -2435,10 +2434,6 @@ class ThreadedEchoServer(threading.Threa 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, @@ -2472,21 +2467,33 @@ class ThreadedEchoServer(threading.Threa 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 Index: gevent-25.4.2/src/greentest/3.9/test_ssl.py =================================================================== --- gevent-25.4.2.orig/src/greentest/3.9/test_ssl.py +++ gevent-25.4.2/src/greentest/3.9/test_ssl.py @@ -2559,10 +2559,6 @@ class ThreadedEchoServer(threading.Threa 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,