Browse Source

ZOOKEEPER-419. Reference counting bug in Python bindings causes abort errors

git-svn-id: https://svn.apache.org/repos/asf/hadoop/zookeeper/trunk@779716 13f79535-47bb-0310-9956-ffa450edef68
Patrick D. Hunt 16 years ago
parent
commit
b21c2e528d
2 changed files with 13 additions and 7 deletions
  1. 9 3
      CHANGES.txt
  2. 4 4
      src/contrib/zkpython/src/c/zookeeper.c

+ 9 - 3
CHANGES.txt

@@ -96,11 +96,17 @@ BUGFIXES:
 
   ZOOKEEPER-385. crctest failed on hudson patch test (mahadev via phunt)
 
-  ZOOKEEPER-192.  trailing whitespace in config file can cause number format exceptions (phunt via breed)
+  ZOOKEEPER-192.  trailing whitespace in config file can cause number format
+  exceptions (phunt via breed)
  
-  ZOOKEEPER-409. address all findbugs warnings in jute related classes (phunt via breed)
+  ZOOKEEPER-409. address all findbugs warnings in jute related classes
+  (phunt via breed)
+
+  ZOOKEEPER-416. bookkeeper jar includes unnnecessary files.
+  (flavio via mahadev)
 
-  ZOOKEEPER-416. bookkeeper jar includes unnnecessary files. (flavio via mahadev)
+  ZOOKEEPER-419. Reference counting bug in Python bindings causes abort errors
+  (henry robinson via phunt)
 
 IMPROVEMENTS:
   ZOOKEEPER-308. improve the atomic broadcast performance 3x.

+ 4 - 4
src/contrib/zkpython/src/c/zookeeper.c

@@ -190,7 +190,7 @@ void stat_completion_dispatch(int rc, const struct Stat *stat, const void *data)
   pywatcher_t *pyw = (pywatcher_t*)data;
   PyObject *callback = pyw->callback;
   gstate = PyGILState_Ensure();
-  PyObject *arglist = Py_BuildValue("(i,i,O)", pyw->zhandle,rc, build_stat(stat));
+  PyObject *arglist = Py_BuildValue("(i,i,N)", pyw->zhandle,rc, build_stat(stat));
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL)
     PyErr_Print();
   free_pywatcher(pyw);
@@ -655,7 +655,7 @@ static PyObject *pyzoo_set2(PyObject *self, PyObject *args)
       return NULL;
     }
 
-  return Py_BuildValue("O", build_stat(stat));
+  return build_stat(stat);
 }
 
 static PyObject *pyzoo_get(PyObject *self, PyObject *args)
@@ -684,7 +684,7 @@ static PyObject *pyzoo_get(PyObject *self, PyObject *args)
       return NULL;
     }
 
-  return Py_BuildValue( "(s#,O)", buffer,buffer_len, stat_dict );
+  return Py_BuildValue( "(s#,N)", buffer,buffer_len, stat_dict );
 }
 
 PyObject *pyzoo_get_acl(PyObject *self, PyObject *args)
@@ -703,7 +703,7 @@ PyObject *pyzoo_get_acl(PyObject *self, PyObject *args)
     }
   PyObject *pystat = build_stat( &stat );
   PyObject *acls = build_acls( &acl );
-  return Py_BuildValue( "(O,O)", pystat, acls );
+  return Py_BuildValue( "(N,N)", pystat, acls );
 }
 
 PyObject *pyzoo_set_acl(PyObject *self, PyObject *args)