You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by he...@apache.org on 2012/06/19 02:20:52 UTC

svn commit: r1351541 - in /zookeeper/trunk: CHANGES.txt src/contrib/zkpython/src/c/zookeeper.c

Author: henry
Date: Tue Jun 19 00:20:51 2012
New Revision: 1351541

URL: http://svn.apache.org/viewvc?rev=1351541&view=rev
Log:
ZOOKEEPER-1431. zkpython async calls leak memory (Kapil Thangavelu and Andre Cruz via henryr)

Modified:
    zookeeper/trunk/CHANGES.txt
    zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c

Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1351541&r1=1351540&r2=1351541&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Tue Jun 19 00:20:51 2012
@@ -183,6 +183,8 @@ BUGFIXES:
 
   ZOOKEEPER-642. "exceeded deadline by N ms" floods logs (Marc Celani via michim)
 
+  ZOOKEEPER-1431. zkpython async calls leak memory (Kapil Thangavelu and Andre Cruz via henryr)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-1170. Fix compiler (eclipse) warnings: unused imports,

Modified: zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c?rev=1351541&r1=1351540&r2=1351541&view=diff
==============================================================================
--- zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c (original)
+++ zookeeper/trunk/src/contrib/zkpython/src/c/zookeeper.c Tue Jun 19 00:20:51 2012
@@ -437,6 +437,7 @@ void watcher_dispatch(zhandle_t *zzh, in
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL) {
     PyErr_Print();
   }
+  Py_DECREF(arglist);
   if (pyw->permanent == 0 && (type != ZOO_SESSION_EVENT || state < 0)) {
     free_pywatcher(pyw);
   }
@@ -458,6 +459,7 @@ void void_completion_dispatch(int rc, co
   PyObject *arglist = Py_BuildValue("(i,i)", pyw->zhandle, rc);
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL)
     PyErr_Print();
+  Py_DECREF(arglist);
   free_pywatcher(pyw);
   PyGILState_Release(gstate);
 }
@@ -475,9 +477,9 @@ void stat_completion_dispatch(int rc, co
   PyObject *pystat = build_stat(stat);
   PyObject *arglist = Py_BuildValue("(i,i,O)", pyw->zhandle,rc, pystat);
   Py_DECREF(pystat);
-
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL)
     PyErr_Print();
+  Py_DECREF(arglist);
   free_pywatcher(pyw);
   PyGILState_Release(gstate);
 }
@@ -499,6 +501,7 @@ void data_completion_dispatch(int rc, co
 
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL)
     PyErr_Print();
+  Py_DECREF(arglist);
   free_pywatcher(pyw);
   PyGILState_Release(gstate);
 }
@@ -519,6 +522,7 @@ void strings_completion_dispatch(int rc,
       PyObject *arglist = Py_BuildValue("(i,i,O)", pyw->zhandle, rc, pystrings);   
       if (arglist == NULL || PyObject_CallObject((PyObject*)callback, arglist) == NULL)
         PyErr_Print();
+      Py_DECREF(arglist);
     }
   else
     PyErr_Print();
@@ -541,6 +545,7 @@ void string_completion_dispatch(int rc, 
   PyObject *arglist = Py_BuildValue("(i,i,s)", pyw->zhandle,rc, value);
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL)
     PyErr_Print();
+  Py_DECREF(arglist);
   free_pywatcher(pyw);
   PyGILState_Release(gstate);
 }
@@ -566,6 +571,7 @@ void acl_completion_dispatch(int rc, str
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL) {
     PyErr_Print();
   }
+  Py_DECREF(arglist);
   free_pywatcher(pyw);
   PyGILState_Release(gstate);
 }