};
static PyType_Spec sslerror_type_spec = {
- "ssl.SSLError",
- sizeof(PyOSErrorObject),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE,
- sslerror_type_slots
+ .name = "ssl.SSLError",
+ .basicsize = sizeof(PyOSErrorObject),
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC),
+ .slots = sslerror_type_slots
};
static void
SSL_CTX *ctx = sslctx->ctx;
_PySSLError err = { 0 };
- self = PyObject_New(PySSLSocket, get_state_ctx(sslctx)->PySSLSocket_Type);
+ self = PyObject_GC_New(PySSLSocket,
+ get_state_ctx(sslctx)->PySSLSocket_Type);
if (self == NULL)
return NULL;
return NULL;
}
}
+
+ PyObject_GC_Track(self);
return self;
}
Py_VISIT(self->exc_type);
Py_VISIT(self->exc_value);
Py_VISIT(self->exc_tb);
+ Py_VISIT(Py_TYPE(self));
return 0;
}
PySSL_dealloc(PySSLSocket *self)
{
PyTypeObject *tp = Py_TYPE(self);
- if (self->ssl)
+ PyObject_GC_UnTrack(self);
+ if (self->ssl) {
SSL_free(self->ssl);
+ }
Py_XDECREF(self->Socket);
Py_XDECREF(self->ctx);
Py_XDECREF(self->server_hostname);
Py_XDECREF(self->owner);
- PyObject_Free(self);
+ PyObject_GC_Del(self);
Py_DECREF(tp);
}
};
static PyType_Spec PySSLSocket_spec = {
- "_ssl._SSLSocket",
- sizeof(PySSLSocket),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE,
- PySSLSocket_slots,
+ .name = "_ssl._SSLSocket",
+ .basicsize = sizeof(PySSLSocket),
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE |
+ Py_TPFLAGS_HAVE_GC),
+ .slots = PySSLSocket_slots,
};
/*
{
Py_VISIT(self->set_sni_cb);
Py_VISIT(self->msg_cb);
+ Py_VISIT(Py_TYPE(self));
return 0;
}
};
static PyType_Spec PySSLContext_spec = {
- "_ssl._SSLContext",
- sizeof(PySSLContext),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE,
- PySSLContext_slots,
+ .name = "_ssl._SSLContext",
+ .basicsize = sizeof(PySSLContext),
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_IMMUTABLETYPE),
+ .slots = PySSLContext_slots,
};
return (PyObject *) self;
}
+static int
+memory_bio_traverse(PySSLMemoryBIO *self, visitproc visit, void *arg)
+{
+ Py_VISIT(Py_TYPE(self));
+ return 0;
+}
+
static void
memory_bio_dealloc(PySSLMemoryBIO *self)
{
PyTypeObject *tp = Py_TYPE(self);
+ PyObject_GC_UnTrack(self);
BIO_free(self->bio);
Py_TYPE(self)->tp_free(self);
Py_DECREF(tp);
{Py_tp_getset, memory_bio_getsetlist},
{Py_tp_new, _ssl_MemoryBIO},
{Py_tp_dealloc, memory_bio_dealloc},
+ {Py_tp_traverse, memory_bio_traverse},
{0, 0},
};
static PyType_Spec PySSLMemoryBIO_spec = {
- "_ssl.MemoryBIO",
- sizeof(PySSLMemoryBIO),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE,
- PySSLMemoryBIO_slots,
+ .name = "_ssl.MemoryBIO",
+ .basicsize = sizeof(PySSLMemoryBIO),
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE |
+ Py_TPFLAGS_HAVE_GC),
+ .slots = PySSLMemoryBIO_slots,
};
/*
PySSLSession_traverse(PySSLSession *self, visitproc visit, void *arg)
{
Py_VISIT(self->ctx);
+ Py_VISIT(Py_TYPE(self));
return 0;
}
};
static PyType_Spec PySSLSession_spec = {
- "_ssl.SSLSession",
- sizeof(PySSLSession),
- 0,
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE,
- PySSLSession_slots,
+ .name = "_ssl.SSLSession",
+ .basicsize = sizeof(PySSLSession),
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_IMMUTABLETYPE),
+ .slots = PySSLSession_slots,
};