[libvirt] [libvirt-python PATCH 20/23] use VIR_PY_TUPLE_GOTO

John Ferlan jferlan at redhat.com
Sat Sep 26 14:20:16 UTC 2015



On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  libvirt-override.c | 304 +++++++++++++++++++++++++++--------------------------
>  1 file changed, 155 insertions(+), 149 deletions(-)
> 
> diff --git a/libvirt-override.c b/libvirt-override.c
> index 205f0dd..c2e9fb9 100644
> --- a/libvirt-override.c
> +++ b/libvirt-override.c
> @@ -116,12 +116,17 @@ libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED,
>      if ((info = PyTuple_New(5)) == NULL)
>          return NULL;
>  
> -    PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rd_req));
> -    PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rd_bytes));
> -    PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.wr_req));
> -    PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.wr_bytes));
> -    PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.errs));
> +    VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rd_req), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rd_bytes), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.wr_req), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.wr_bytes), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.errs), error);
> +
>      return info;
> +
> +error:
> +    Py_DECREF(info);
> +    return NULL;
>  }
>  
>  static PyObject *
> @@ -337,15 +342,20 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED,
>      if ((info = PyTuple_New(8)) == NULL)
>          return NULL;
>  
> -    PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rx_bytes));
> -    PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rx_packets));
> -    PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.rx_errs));
> -    PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.rx_drop));
> -    PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.tx_bytes));
> -    PyTuple_SetItem(info, 5, libvirt_longlongWrap(stats.tx_packets));
> -    PyTuple_SetItem(info, 6, libvirt_longlongWrap(stats.tx_errs));
> -    PyTuple_SetItem(info, 7, libvirt_longlongWrap(stats.tx_drop));
> +    VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rx_bytes), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rx_packets), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.rx_errs), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.rx_drop), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.tx_bytes), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_longlongWrap(stats.tx_packets), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_longlongWrap(stats.tx_errs), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_longlongWrap(stats.tx_drop), error);
> +
>      return info;
> +
> + error:
> +    Py_DECREF(info);
> +    return NULL;
>  }
>  
>  static PyObject *
> @@ -442,12 +452,17 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED,
>      if ((info = PyTuple_New(2)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval));
> -    PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams));
> +    VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_constcharPtrWrap(c_retval), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)nparams), error);
>  
>   cleanup:
>      VIR_FREE(c_retval);
>      return info;
> +
> + error:
> +    Py_CLEAR(info);
> +    goto cleanup;
> +
>  }
>  
>  static PyObject *
> @@ -1239,18 +1254,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
>      if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL)
>          goto cleanup;
>  
> -    if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0)
> -        goto cleanup;
> +    VIR_PY_TUPLE_SET_GOTO(pyretval, 0, pycpuinfo, cleanup);
>  
>      if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL)
>          goto cleanup;
>  
> -    if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0)
> -        goto cleanup;
> +    VIR_PY_TUPLE_SET_GOTO(pyretval, 1, pycpumap, cleanup);
>  
>      for (i = 0; i < dominfo.nrVirtCpu; i++) {
>          PyObject *info = PyTuple_New(4);
> -        PyObject *item = NULL;
>  
>          if (info == NULL)
>              goto cleanup;
> @@ -1258,21 +1270,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
>          if (PyList_SetItem(pycpuinfo, i, info) < 0)
>              goto cleanup;
>  
> -        if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL ||
> -            PyTuple_SetItem(info, 0, item) < 0)
> -            goto cleanup;
> -
> -        if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL ||
> -            PyTuple_SetItem(info, 1, item) < 0)
> -            goto cleanup;
> -
> -        if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL ||
> -            PyTuple_SetItem(info, 2, item) < 0)
> -            goto cleanup;
> -
> -        if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL ||
> -            PyTuple_SetItem(info, 3, item) < 0)
> -            goto cleanup;
> +        VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)cpuinfo[i].number),
> +                              cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)cpuinfo[i].state),
> +                              cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 2,
> +                              libvirt_ulonglongWrap((long)cpuinfo[i].cpuTime),
> +                              cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)cpuinfo[i].cpu),
> +                              cleanup);
>      }
>      for (i = 0; i < dominfo.nrVirtCpu; i++) {
>          PyObject *info = PyTuple_New(cpunum);
> @@ -1284,11 +1290,11 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
>              goto cleanup;
>  
>          for (j = 0; j < cpunum; j++) {
> -            PyObject *item = NULL;
> -            if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen,
> -                                                       i, j))) == NULL ||
> -                PyTuple_SetItem(info, j, item) < 0)
> -                goto cleanup;
> +            VIR_PY_TUPLE_SET_GOTO(info, j,
> +                                  PyBool_FromLong(VIR_CPU_USABLE(cpumap,
> +                                                                 cpumaplen,
> +                                                                 i, j)),
> +                                  cleanup);
>          }
>      }
>  
> @@ -1485,9 +1491,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
>          PyList_SetItem(pycpumaps, vcpu, mapinfo);
>  
>          for (pcpu = 0; pcpu < cpunum; pcpu++) {
> -            PyTuple_SetItem(mapinfo, pcpu,
> -                            PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen,
> -                                                           vcpu, pcpu)));
> +            VIR_PY_TUPLE_SET_GOTO(mapinfo,
> +                                  pcpu,
> +                                  PyBool_FromLong(VIR_CPU_USABLE(cpumaps,
> +                                                                 cpumaplen,
> +                                                                 vcpu,
> +                                                                 pcpu)),
> +                                  cleanup);
>          }
>      }
>  
> @@ -1611,13 +1621,23 @@ libvirt_virDomainGetEmulatorPinInfo(PyObject *self ATTRIBUTE_UNUSED,
>          return NULL;
>      }
>  
> -    for (pcpu = 0; pcpu < cpunum; pcpu++)
> -        PyTuple_SET_ITEM(pycpumap, pcpu,
> -                         PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen,
> -                                                        0, pcpu)));
> +    for (pcpu = 0; pcpu < cpunum; pcpu++) {
> +        VIR_PY_TUPLE_SET_GOTO(pycpumap,
> +                              pcpu,
> +                              PyBool_FromLong(VIR_CPU_USABLE(cpumap,
> +                                                             cpumaplen,
> +                                                             0,
> +                                                             pcpu)),
> +                              error);
> +    }
>  
> + cleanup:
>      VIR_FREE(cpumap);
>      return pycpumap;
> +
> + error:
> +    Py_CLEAR(pycpumap);
> +    goto cleanup;
>  }
>  #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */
>  
> @@ -1675,18 +1695,15 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED,
>          }
>  
>          /* 0: IOThread ID */
> -        if ((iothrid = libvirt_uintWrap(iothr->iothread_id)) == NULL ||
> -            PyTuple_SetItem(iothrtpl, 0, iothrid) < 0) {
> -            Py_XDECREF(iothrid);
> -            goto cleanup;
> -        }
> +        VIR_PY_TUPLE_SET_GOTO(iothrtpl, 0, libvirt_uintWrap(iothr->iothread_id),
> +                              cleanup);

Build error 'iothrid' no longer necessary

>  
>          /* 1: CPU map */
> -        if ((iothrmap = PyList_New(cpunum)) == NULL ||
> -            PyTuple_SetItem(iothrtpl, 1, iothrmap) < 0) {
> -            Py_XDECREF(iothrmap);
> +        if ((iothrmap = PyList_New(cpunum)) == NULL)
>              goto cleanup;
> -        }
> +
> +        VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup);
> +
>          for (pcpu = 0; pcpu < cpunum; pcpu++) {
>              PyObject *pyused;
>              if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap,
> @@ -1801,17 +1818,21 @@ libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED,
>      if ((info = PyTuple_New(9)) == NULL)
>          return NULL;
>  
> -    PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code));
> -    PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain));
> -    PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message));
> -    PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level));
> -    PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1));
> -    PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2));
> -    PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3));
> -    PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1));
> -    PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2));
> +    VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error);
>  
>      return info;
> +
> + error:
> +    Py_XDECREF(info);
> +    return NULL;
>  }
>  
>  static PyObject *
> @@ -1836,17 +1857,21 @@ libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED,
>      if ((info = PyTuple_New(9)) == NULL)
>          return NULL;
>  
> -    PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code));
> -    PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain));
> -    PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message));
> -    PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level));
> -    PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1));
> -    PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2));
> -    PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3));
> -    PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1));
> -    PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2));
> +    VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error);
> +    VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error);
>  
>      return info;
> +
> + error:
> +    Py_XDECREF(info);
> +    return NULL;
>  }
>  
>  static void
> @@ -1872,22 +1897,23 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx,
>              goto cleanup;
>  
>          Py_XINCREF(libvirt_virPythonErrorFuncCtxt);
> -        PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt);
> +        VIR_PY_TUPLE_SET_GOTO(list, 0, libvirt_virPythonErrorFuncCtxt, cleanup);
>  
>          if ((info = PyTuple_New(9)) == NULL)
>              goto cleanup;
>  
> -        PyTuple_SetItem(list, 1, info);
> -
> -        PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code));
> -        PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain));
> -        PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message));
> -        PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level));
> -        PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1));
> -        PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2));
> -        PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3));
> -        PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1));
> -        PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2));
> +        VIR_PY_TUPLE_SET_GOTO(list, 1, info, cleanup);
> +
> +        VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), cleanup);
> +
>          /* TODO pass conn and dom if available */
>          result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list);
>          Py_XDECREF(result);
> @@ -1959,14 +1985,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred,
>      if ((pycred = PyTuple_New(ncred)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(list, 0, pycred);
> +    VIR_PY_TUPLE_SET_GOTO(list, 0, pycred, cleanup);
>  
>      for (i = 0; i < ncred; i++) {
>          PyObject *pycreditem = PyList_New(5);
>          if (pycreditem == NULL)
>              goto cleanup;
>  
> -        PyTuple_SetItem(pycred, i, pycreditem);
> +        VIR_PY_TUPLE_SET_GOTO(pycred, i, pycreditem, cleanup);
> +
>          PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type));
>          PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt));
>          if (cred[i].challenge) {
> @@ -1985,7 +2012,7 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred,
>      }
>  
>      Py_XINCREF(pycbdata);
> -    PyTuple_SetItem(list, 1, pycbdata);
> +    VIR_PY_TUPLE_SET_GOTO(list, 1, pycbdata, cleanup);
>  
>      PyErr_Clear();
>      pyret = PyEval_CallObject(pycb, list);
> @@ -5204,9 +5231,6 @@ libvirt_virEventAddHandleFunc(int fd,
>                                virFreeCallback ff)
>  {
>      PyObject *result;
> -    PyObject *cb_obj;
> -    PyObject *ff_obj;
> -    PyObject *opaque_obj;
>      PyObject *python_cb = NULL;
>      PyObject *cb_args = NULL;
>      PyObject *pyobj_args = NULL;
> @@ -5217,8 +5241,8 @@ libvirt_virEventAddHandleFunc(int fd,
>      if ((pyobj_args = PyTuple_New(4)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd));
> -    PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(fd), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup);
>  
>      /* Lookup the python callback */
>      python_cb = libvirt_lookupPythonFunc("_eventInvokeHandleCallback");
> @@ -5227,20 +5251,16 @@ libvirt_virEventAddHandleFunc(int fd,
>      }
>      Py_INCREF(python_cb);
>  
> -    PyTuple_SetItem(pyobj_args, 2, python_cb);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, python_cb, cleanup);
>  
>      if ((cb_args = PyTuple_New(3)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 3, cb_args);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 3, cb_args, cleanup);
>  
> -    /* create tuple for cb */
> -    cb_obj = libvirt_virEventHandleCallbackWrap(cb);
> -    ff_obj = libvirt_virFreeCallbackWrap(ff);
> -    opaque_obj = libvirt_virVoidPtrWrap(opaque);
> -    PyTuple_SetItem(cb_args, 0, cb_obj);
> -    PyTuple_SetItem(cb_args, 1, opaque_obj);
> -    PyTuple_SetItem(cb_args, 2, ff_obj);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventHandleCallbackWrap(cb), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup);
>  
>      result = PyEval_CallObject(addHandleObj, pyobj_args);
>      if (!result) {
> @@ -5272,8 +5292,8 @@ libvirt_virEventUpdateHandleFunc(int watch,
>      if ((pyobj_args = PyTuple_New(2)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch));
> -    PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup);
>  
>      result = PyEval_CallObject(updateHandleObj, pyobj_args);
>      if (!result) {
> @@ -5304,7 +5324,7 @@ libvirt_virEventRemoveHandleFunc(int watch)
>      if ((pyobj_args = PyTuple_New(1)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup);
>  
>      result = PyEval_CallObject(removeHandleObj, pyobj_args);
>      if (!result) {
> @@ -5339,9 +5359,6 @@ libvirt_virEventAddTimeoutFunc(int timeout,
>                                 void *opaque,
>                                 virFreeCallback ff)
>  {
> -    PyObject *cb_obj;
> -    PyObject *ff_obj;
> -    PyObject *opaque_obj;
>      PyObject *result = NULL;
>      PyObject *python_cb = NULL;
>      PyObject *cb_args = NULL;
> @@ -5353,7 +5370,7 @@ libvirt_virEventAddTimeoutFunc(int timeout,
>      if ((pyobj_args = PyTuple_New(3)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timeout), cleanup);
>  
>      /* Lookup the python callback */
>      python_cb = libvirt_lookupPythonFunc("_eventInvokeTimeoutCallback");
> @@ -5361,20 +5378,16 @@ libvirt_virEventAddTimeoutFunc(int timeout,
>          goto cleanup;
>      }
>      Py_INCREF(python_cb);
> -    PyTuple_SetItem(pyobj_args, 1, python_cb);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, python_cb, cleanup);
>  
>      if ((cb_args = PyTuple_New(3)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 2, cb_args);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, cb_args, cleanup);
>  
> -    /* create tuple for cb */
> -    cb_obj = libvirt_virEventTimeoutCallbackWrap(cb);
> -    ff_obj = libvirt_virFreeCallbackWrap(ff);
> -    opaque_obj = libvirt_virVoidPtrWrap(opaque);
> -    PyTuple_SetItem(cb_args, 0, cb_obj);
> -    PyTuple_SetItem(cb_args, 1, opaque_obj);
> -    PyTuple_SetItem(cb_args, 2, ff_obj);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventTimeoutCallbackWrap(cb), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup);
>  
>      result = PyEval_CallObject(addTimeoutObj, pyobj_args);
>      if (!result) {
> @@ -5404,8 +5417,8 @@ libvirt_virEventUpdateTimeoutFunc(int timer,
>      if ((pyobj_args = PyTuple_New(2)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer));
> -    PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(timeout));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup);
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(timeout), cleanup);
>  
>      result = PyEval_CallObject(updateTimeoutObj, pyobj_args);
>      if (!result) {
> @@ -5435,7 +5448,7 @@ libvirt_virEventRemoveTimeoutFunc(int timer)
>      if ((pyobj_args = PyTuple_New(1)) == NULL)
>          goto cleanup;
>  
> -    PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer));
> +    VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup);
>  
>      result = PyEval_CallObject(removeTimeoutObj, pyobj_args);
>      if (!result) {
> @@ -6103,11 +6116,12 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE
>  
>          PyList_SetItem(pyobj_subject, i, pair);
>  
> -        PyTuple_SetItem(pair, 0,
> -                        libvirt_constcharPtrWrap(subject->identities[i].type));
> -        PyTuple_SetItem(pair, 1,
> -                        libvirt_constcharPtrWrap(subject->identities[i].name));
> -
> +        VIR_PY_TUPLE_SET_GOTO(pair, 0,
> +                              libvirt_constcharPtrWrap(subject->identities[i].type),
> +                              cleanup);
> +        VIR_PY_TUPLE_SET_GOTO(pair, 1,
> +                              libvirt_constcharPtrWrap(subject->identities[i].name),
> +                              cleanup);
>      }
>  
>      /* Call the Callback Dispatcher */
> @@ -7660,16 +7674,13 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED,
>          goto error;
>  
>      /* 0: number of CPUs */
> -    if ((pycpunum = libvirt_intWrap(i_retval)) == NULL ||
> -        PyTuple_SetItem(ret, 0, pycpunum) < 0)
> -        goto error;
> +    VIR_PY_TUPLE_SET_GOTO(ret, 0, libvirt_intWrap(i_retval), error);

Build issue - pycpunum no longer necessary

>  
>      /* 1: CPU map */
>      if ((pycpumap = PyList_New(i_retval)) == NULL)
>          goto error;
>  
> -    if (PyTuple_SetItem(ret, 1, pycpumap) < 0)
> -        goto error;
> +    VIR_PY_TUPLE_SET_GOTO(ret, 1, pycpumap, error);

Build issue - pycpumap no longer necessary

>  
>      for (i = 0; i < i_retval; i++) {
>          if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL)
> @@ -7679,9 +7690,7 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED,
>      }
>  
>      /* 2: number of online CPUs */
> -    if ((pyonline = libvirt_uintWrap(online)) == NULL ||
> -        PyTuple_SetItem(ret, 2, pyonline) < 0)
> -        goto error;
> +    VIR_PY_TUPLE_SET_GOTO(ret, 2, libvirt_uintWrap(online), error);
>  
>   cleanup:
>      VIR_FREE(cpumap);
> @@ -8203,20 +8212,15 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
>  
>          /* libvirt_virDomainPtrWrap steals the object */
>          virDomainRef(records[i]->dom);
> -        if (!(py_record_domain = libvirt_virDomainPtrWrap(records[i]->dom))) {
> -            virDomainFree(records[i]->dom);
> -            goto error;
> -        }
> -
> -        if (PyTuple_SetItem(py_record, 0, py_record_domain) < 0)
> -            goto error;
> +        VIR_PY_TUPLE_SET_GOTO(py_record, 0,
> +                              libvirt_virDomainPtrWrap(records[i]->dom),
> +                              error);

build issue 'py_record_domain' no longer necessary

John
>  
>          if (!(py_record_stats = getPyVirTypedParameter(records[i]->params,
>                                                         records[i]->nparams)))
>              goto error;
> +        VIR_PY_TUPLE_SET_GOTO(py_record, 1, py_record_stats, error);
>  
> -        if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0)
> -            goto error;
>      }
>  
>      return py_retval;
> @@ -8451,15 +8455,17 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
>  
>          PyList_SetItem(py_retval, i, info);
>  
> -        PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint));
> -        PyTuple_SetItem(info, 1, libvirt_constcharPtrWrap(fs->name));
> -        PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(fs->fstype));
> +        VIR_PY_TUPLE_SET_GOTO(info, 0,
> +                              libvirt_constcharPtrWrap(fs->mountpoint), error);
> +        VIR_PY_TUPLE_SET_GOTO(info, 1,
> +                              libvirt_constcharPtrWrap(fs->name), error);
> +        VIR_PY_TUPLE_SET_GOTO(info, 2,
> +                              libvirt_constcharPtrWrap(fs->fstype), error);
>  
>          alias = PyList_New(0);
>          if (alias == NULL)
>              goto error;
> -
> -        PyTuple_SetItem(info, 3, alias);
> +        VIR_PY_TUPLE_SET_GOTO(info, 3, alias, error);
>  
>          for (j = 0; j < fs->ndevAlias; j++)
>              if (PyList_Append(alias,
> 




More information about the libvir-list mailing list