Py_buffer write_buffer;
} OverlappedObject;
+#define OverlappedObject_CAST(op) ((OverlappedObject *)(op))
+
/*
Note: tp_clear (overlapped_clear) is not implemented because it
requires cancelling the IO operation if it's pending and the cancellation is
quite complex and can fail (see: overlapped_dealloc).
*/
static int
-overlapped_traverse(OverlappedObject *self, visitproc visit, void *arg)
+overlapped_traverse(PyObject *op, visitproc visit, void *arg)
{
+ OverlappedObject *self = OverlappedObject_CAST(op);
Py_VISIT(self->read_buffer);
Py_VISIT(self->write_buffer.obj);
Py_VISIT(Py_TYPE(self));
}
static void
-overlapped_dealloc(OverlappedObject *self)
+overlapped_dealloc(PyObject *op)
{
DWORD bytes;
int err = GetLastError();
+ OverlappedObject *self = OverlappedObject_CAST(op);
PyObject_GC_UnTrack(self);
if (self->pending) {
static void
winapi_free(void *module)
{
- winapi_clear((PyObject *)module);
+ (void)winapi_clear((PyObject *)module);
}
static struct PyModuleDef winapi_module = {