mirror of
https://gitlab.com/libvirt/libvirt-python.git
synced 2025-08-12 17:49:25 +03:00
Add a virFreeCallback to event loop APIs
This commit is contained in:
23
libvir.c
23
libvir.c
@ -1704,12 +1704,16 @@ static PyObject *removeTimeoutObj = NULL;
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
libvirt_virEventAddHandleFunc (int fd ATTRIBUTE_UNUSED, int event ATTRIBUTE_UNUSED,
|
libvirt_virEventAddHandleFunc (int fd,
|
||||||
virEventHandleCallback cb, void *opaque)
|
int event,
|
||||||
|
virEventHandleCallback cb,
|
||||||
|
void *opaque,
|
||||||
|
virFreeCallback ff)
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
PyObject *python_cb;
|
PyObject *python_cb;
|
||||||
PyObject *cb_obj;
|
PyObject *cb_obj;
|
||||||
|
PyObject *ff_obj;
|
||||||
PyObject *opaque_obj;
|
PyObject *opaque_obj;
|
||||||
PyObject *cb_args;
|
PyObject *cb_args;
|
||||||
PyObject *pyobj_args;
|
PyObject *pyobj_args;
|
||||||
@ -1730,11 +1734,13 @@ libvirt_virEventAddHandleFunc (int fd ATTRIBUTE_UNUSED, int event ATTRIBUTE_UNU
|
|||||||
|
|
||||||
/* create tuple for cb */
|
/* create tuple for cb */
|
||||||
cb_obj = libvirt_virEventHandleCallbackWrap(cb);
|
cb_obj = libvirt_virEventHandleCallbackWrap(cb);
|
||||||
|
ff_obj = libvirt_virFreeCallbackWrap(ff);
|
||||||
opaque_obj = libvirt_virVoidPtrWrap(opaque);
|
opaque_obj = libvirt_virVoidPtrWrap(opaque);
|
||||||
|
|
||||||
cb_args = PyTuple_New(2);
|
cb_args = PyTuple_New(3);
|
||||||
PyTuple_SetItem(cb_args, 0, cb_obj);
|
PyTuple_SetItem(cb_args, 0, cb_obj);
|
||||||
PyTuple_SetItem(cb_args, 1, opaque_obj);
|
PyTuple_SetItem(cb_args, 1, opaque_obj);
|
||||||
|
PyTuple_SetItem(cb_args, 2, ff_obj);
|
||||||
|
|
||||||
pyobj_args = PyTuple_New(4);
|
pyobj_args = PyTuple_New(4);
|
||||||
PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd));
|
PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd));
|
||||||
@ -1799,14 +1805,17 @@ libvirt_virEventRemoveHandleFunc(int fd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
libvirt_virEventAddTimeoutFunc(int timeout, virEventTimeoutCallback cb,
|
libvirt_virEventAddTimeoutFunc(int timeout,
|
||||||
void *opaque)
|
virEventTimeoutCallback cb,
|
||||||
|
void *opaque,
|
||||||
|
virFreeCallback ff)
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
|
||||||
PyObject *python_cb;
|
PyObject *python_cb;
|
||||||
|
|
||||||
PyObject *cb_obj;
|
PyObject *cb_obj;
|
||||||
|
PyObject *ff_obj;
|
||||||
PyObject *opaque_obj;
|
PyObject *opaque_obj;
|
||||||
PyObject *cb_args;
|
PyObject *cb_args;
|
||||||
PyObject *pyobj_args;
|
PyObject *pyobj_args;
|
||||||
@ -1827,11 +1836,13 @@ libvirt_virEventAddTimeoutFunc(int timeout, virEventTimeoutCallback cb,
|
|||||||
|
|
||||||
/* create tuple for cb */
|
/* create tuple for cb */
|
||||||
cb_obj = libvirt_virEventTimeoutCallbackWrap(cb);
|
cb_obj = libvirt_virEventTimeoutCallbackWrap(cb);
|
||||||
|
ff_obj = libvirt_virFreeCallbackWrap(ff);
|
||||||
opaque_obj = libvirt_virVoidPtrWrap(opaque);
|
opaque_obj = libvirt_virVoidPtrWrap(opaque);
|
||||||
|
|
||||||
cb_args = PyTuple_New(2);
|
cb_args = PyTuple_New(3);
|
||||||
PyTuple_SetItem(cb_args, 0, cb_obj);
|
PyTuple_SetItem(cb_args, 0, cb_obj);
|
||||||
PyTuple_SetItem(cb_args, 1, opaque_obj);
|
PyTuple_SetItem(cb_args, 1, opaque_obj);
|
||||||
|
PyTuple_SetItem(cb_args, 2, ff_obj);
|
||||||
|
|
||||||
pyobj_args = PyTuple_New(3);
|
pyobj_args = PyTuple_New(3);
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ PyObject * libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node);
|
|||||||
PyObject * libvirt_virStorageVolPtrWrap(virStorageVolPtr node);
|
PyObject * libvirt_virStorageVolPtrWrap(virStorageVolPtr node);
|
||||||
PyObject * libvirt_virEventHandleCallbackWrap(virEventHandleCallback node);
|
PyObject * libvirt_virEventHandleCallbackWrap(virEventHandleCallback node);
|
||||||
PyObject * libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node);
|
PyObject * libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node);
|
||||||
|
PyObject * libvirt_virFreeCallbackWrap(virFreeCallback node);
|
||||||
PyObject * libvirt_virVoidPtrWrap(void* node);
|
PyObject * libvirt_virVoidPtrWrap(void* node);
|
||||||
|
|
||||||
/* Provide simple macro statement wrappers (adapted from GLib, in turn from Perl):
|
/* Provide simple macro statement wrappers (adapted from GLib, in turn from Perl):
|
||||||
|
16
types.c
16
types.c
@ -195,6 +195,22 @@ libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
libvirt_virFreeCallbackWrap(virFreeCallback node)
|
||||||
|
{
|
||||||
|
PyObject *ret;
|
||||||
|
|
||||||
|
if (node == NULL) {
|
||||||
|
printf("%s: WARNING - Wrapping None\n", __FUNCTION__);
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
return (Py_None);
|
||||||
|
}
|
||||||
|
ret =
|
||||||
|
PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "virFreeCallback",
|
||||||
|
NULL);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
libvirt_virVoidPtrWrap(void* node)
|
libvirt_virVoidPtrWrap(void* node)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user