Author: henry Date: Mon Aug 23 02:53:53 2010 New Revision: 987982 URL: http://svn.apache.org/viewvc?rev=987982&view=rev Log: ZOOKEEPER-792: zkpython memory leak (Lei Zhang via henryr)
Modified: hadoop/zookeeper/trunk/CHANGES.txt hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c Modified: hadoop/zookeeper/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=987982&r1=987981&r2=987982&view=diff ============================================================================== --- hadoop/zookeeper/trunk/CHANGES.txt (original) +++ hadoop/zookeeper/trunk/CHANGES.txt Mon Aug 23 02:53:53 2010 @@ -78,6 +78,8 @@ BUGFIXES: ZOOKEEPER-795. eventThread isn't shutdown after a connection "session expired" event coming (Sergey Doroshenko and Ben via mahadev) + ZOOKEEPER-792. zkpython memory leak (Lei Zhang via henryr) + IMPROVEMENTS: ZOOKEEPER-724. Improve junit test integration - log harness information (phunt via mahadev) Modified: hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c?rev=987982&r1=987981&r2=987982&view=diff ============================================================================== --- hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c (original) +++ hadoop/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c Mon Aug 23 02:53:53 2010 @@ -1011,6 +1011,7 @@ static PyObject *pyzoo_create(PyObject * } zhandle_t *zh = zhandles[zkhid]; int err = zoo_create(zh, path, values, valuelen, &aclv, flags, realbuf, maxbuf_len); + free_acls(&aclv); if (err != ZOK) { PyErr_SetString(err_to_exception(err), zerror(err)); return NULL; @@ -1183,7 +1184,7 @@ static PyObject *pyzoo_get(PyObject *sel } buffer = malloc(sizeof(char)*buffer_len); if (buffer == NULL) { - free(pw); + free_pywatcher(pw); PyErr_SetString(PyExc_MemoryError, "buffer could not be allocated in pyzoo_get"); return NULL; } @@ -1193,14 +1194,17 @@ static PyObject *pyzoo_get(PyObject *sel pw, buffer, &buffer_len, &stat); - PyObject *stat_dict = build_stat( &stat ); - if (err != ZOK) { PyErr_SetString(err_to_exception(err), zerror(err)); + free_pywatcher(pw); + free(buffer); return NULL; } + + PyObject *stat_dict = build_stat( &stat ); PyObject *ret = Py_BuildValue( "(s#,N)", buffer,buffer_len, stat_dict ); free(buffer); + return ret; }