PyModule_AddObject steals a reference. Fix all of the double calls to it by adding a Py_INCREF. Also, some other assorted hacks which probably shouldn't be necessary but are at the moment.
diff --git a/src/ssl/connection.c b/src/ssl/connection.c
index 6ee484d..ec15a3c 100755
--- a/src/ssl/connection.c
+++ b/src/ssl/connection.c
@@ -1413,6 +1413,9 @@
return 0;
}
+ /* PyModule_AddObject steals a reference.
+ */
+ Py_INCREF((PyObject *)&ssl_Connection_Type);
if (PyModule_AddObject(module, "Connection", (PyObject *)&ssl_Connection_Type) != 0) {
return 0;
}
diff --git a/src/ssl/context.c b/src/ssl/context.c
index ebaf164..ce23f95 100644
--- a/src/ssl/context.c
+++ b/src/ssl/context.c
@@ -1299,6 +1299,9 @@
return 0;
}
+ /* PyModule_AddObject steals a reference.
+ */
+ Py_INCREF((PyObject *)&ssl_Context_Type);
if (PyModule_AddObject(module, "Context", (PyObject *)&ssl_Context_Type) < 0) {
return 0;
}
diff --git a/src/ssl/ssl.c b/src/ssl/ssl.c
index 94d4844..1f12d67 100644
--- a/src/ssl/ssl.c
+++ b/src/ssl/ssl.c
@@ -92,8 +92,12 @@
} while (0)
ssl_Error = PyErr_NewException("OpenSSL.SSL.Error", NULL, NULL);
- if (ssl_Error == NULL)
+ if (ssl_Error == NULL) {
goto error;
+ }
+ /* XXX PyPy hack */
+ Py_INCREF(ssl_Error);
+
if (PyModule_AddObject(module, "Error", ssl_Error) != 0)
goto error;