[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