[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-600?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12783931#action_12783931
 ] 

Gustavo Niemeyer commented on ZOOKEEPER-600:
--------------------------------------------

Ah, I see.

Yes, PyString_FromString will definitely copy the string over, so the 
strings.data array is leaking if it has data allocated dynamically.

In addition to this, PyString_FromString and PyList_New are both allocating 
memory, and thus they may fail to return a proper object.  This isn't being 
checked currently.

> TODO pondering about allocation behavior in zkpython may be removed
> -------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-600
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-600
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: contrib-bindings
>    Affects Versions: 3.2.1
>            Reporter: Gustavo Niemeyer
>            Assignee: Gustavo Niemeyer
>            Priority: Trivial
>             Fix For: 3.3.0
>
>
> I suppose the TODO below is referring to the "path" variable which is passed 
> in as an output variable to PyArg_ParseTuple right below.  The TODO may be 
> removed, since the code is right.  Code using PyArg_ParseTuple will borrow 
> the reference from the calling code, since there's a stack behind the call to 
> the enclosing function (pyzoo_get_children in this case) which won't go away 
> until the function returns.
> Index: src/contrib/zkpython/src/c/zookeeper.c
> ===================================================================
> --- src/contrib/zkpython/src/c/zookeeper.c    (revision 885582)
> +++ src/contrib/zkpython/src/c/zookeeper.c    (working copy)
> @@ -774,8 +774,6 @@
>  
>  static PyObject *pyzoo_get_children(PyObject *self, PyObject *args)
>  {
> -  // TO DO: Does Python copy the string or the reference? If it's the former
> -  // we should free the String_vector
>    int zkhid;
>    char *path;
>    PyObject *watcherfn = Py_None;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to