[Python-checkins] cpython (3.6): Finish GC code for SSLSession and increase test coverage

christian.heimes python-checkins at python.org
Sat Sep 24 04:48:22 EDT 2016


https://hg.python.org/cpython/rev/49ccf495852b
changeset: 104045:49ccf495852b
branch: 3.6
parent: 104041:d8d047217da1
user: Christian Heimes <christian at python.org>
date: Sat Sep 24 10:48:05 2016 +0200
summary:
 Finish GC code for SSLSession and increase test coverage
files:
 Lib/test/test_ssl.py | 3 +++
 Modules/_ssl.c | 13 +++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -1474,6 +1474,7 @@
 cert_reqs=ssl.CERT_NONE) as s:
 s.connect(self.server_addr)
 self.assertEqual({}, s.getpeercert())
+ self.assertFalse(s.server_side)
 
 # this should succeed because we specify the root cert
 with test_wrap_socket(socket.socket(socket.AF_INET),
@@ -1481,6 +1482,7 @@
 ca_certs=SIGNING_CA) as s:
 s.connect(self.server_addr)
 self.assertTrue(s.getpeercert())
+ self.assertFalse(s.server_side)
 
 def test_connect_fail(self):
 # This should fail because we have no verification certs. Connection
@@ -3028,6 +3030,7 @@
 host = "127.0.0.1"
 port = support.bind_port(server)
 server = context.wrap_socket(server, server_side=True)
+ self.assertTrue(server.server_side)
 
 evt = threading.Event()
 remote = None
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -149,10 +149,12 @@
 }
 
 #ifndef OPENSSL_NO_COMP
+/* LCOV_EXCL_START */
 static int COMP_get_type(const COMP_METHOD *meth)
 {
 return meth->type;
 }
+/* LCOV_EXCL_END */
 #endif
 
 static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
@@ -2408,8 +2410,7 @@
 Py_RETURN_NONE;
 }
 #endif
-
- pysess = PyObject_New(PySSLSession, &PySSLSession_Type);
+ pysess = PyObject_GC_New(PySSLSession, &PySSLSession_Type);
 if (pysess == NULL) {
 SSL_SESSION_free(session);
 return NULL;
@@ -2419,6 +2420,7 @@
 pysess->ctx = self->ctx;
 Py_INCREF(pysess->ctx);
 pysess->session = session;
+ PyObject_GC_Track(pysess);
 return (PyObject *)pysess;
 }
 
@@ -4289,11 +4291,12 @@
 static void
 PySSLSession_dealloc(PySSLSession *self)
 {
+ PyObject_GC_UnTrack(self);
 Py_XDECREF(self->ctx);
 if (self->session != NULL) {
 SSL_SESSION_free(self->session);
 }
- PyObject_Del(self);
+ PyObject_GC_Del(self);
 }
 
 static PyObject *
@@ -4455,7 +4458,7 @@
 0, /*tp_getattro*/
 0, /*tp_setattro*/
 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
 0, /*tp_doc*/
 (traverseproc)PySSLSession_traverse, /*tp_traverse*/
 (inquiry)PySSLSession_clear, /*tp_clear*/
@@ -4590,6 +4593,7 @@
 }
 
 #ifndef OPENSSL_NO_EGD
+/* LCOV_EXCL_START */
 /*[clinic input]
 _ssl.RAND_egd
 path: object(converter="PyUnicode_FSConverter")
@@ -4615,6 +4619,7 @@
 }
 return PyLong_FromLong(bytes);
 }
+/* LCOV_EXCL_STOP */
 #endif /* OPENSSL_NO_EGD */
 
 
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /