You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2010/08/11 20:30:23 UTC

svn commit: r984518 - in /hadoop/zookeeper/branches/branch-3.3: CHANGES.txt src/contrib/zkpython/src/c/zookeeper.c src/contrib/zkpython/src/test/get_set_test.py

Author: mahadev
Date: Wed Aug 11 18:30:23 2010
New Revision: 984518

URL: http://svn.apache.org/viewvc?rev=984518&view=rev
Log:
ZOOKEEPER-772. zkpython segfaults when watcher from async get children is invoked. (henry robinson via mahadev)

Modified:
    hadoop/zookeeper/branches/branch-3.3/CHANGES.txt
    hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/c/zookeeper.c
    hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/test/get_set_test.py

Modified: hadoop/zookeeper/branches/branch-3.3/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.3/CHANGES.txt?rev=984518&r1=984517&r2=984518&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.3/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.3/CHANGES.txt Wed Aug 11 18:30:23 2010
@@ -9,6 +9,9 @@ BUGFIXES:
   ZOOKEEPER-790. Last processed zxid set prematurely while establishing 
   leadership (flavio via mahadev)
 
+  ZOOKEEPER-772. zkpython segfaults when watcher from async get children 
+  is invoked. (henry robinson via mahadev)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-789. Improve FLE log messages (flavio via phunt)

Modified: hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/c/zookeeper.c
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/c/zookeeper.c?rev=984518&r1=984517&r2=984518&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/c/zookeeper.c (original)
+++ hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/c/zookeeper.c Wed Aug 11 18:30:23 2010
@@ -842,7 +842,7 @@ PyObject *pyzoo_aget_children(PyObject *
   int err = zoo_awget_children( zhandles[zkhid],
                                 path,
                                 get_watch != Py_None ? watcher_dispatch : NULL,
-                                pyw,
+                                get_pyw,
                                 strings_completion_dispatch,
                                 pyw);
   if (err != ZOK) {

Modified: hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/test/get_set_test.py
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/test/get_set_test.py?rev=984518&r1=984517&r2=984518&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/test/get_set_test.py (original)
+++ hadoop/zookeeper/branches/branch-3.3/src/contrib/zkpython/src/test/get_set_test.py Wed Aug 11 18:30:23 2010
@@ -155,5 +155,34 @@ class GetSetTest(zktestbase.TestBase):
         self.assertEqual(len(self.children), 1, "Expected to find 1 child, got " + str(len(self.children)))
 
 
+    def test_async_getchildren_with_watcher(self):
+        self.ensureCreated("/zk-python-getchildrentest", flags=0)
+        self.ensureCreated("/zk-python-getchildrentest/child")
+
+        watched = []
+
+        def watcher(*args):
+            self.cv.acquire()
+            watched.append(args)
+            self.cv.notify()
+            self.cv.release()
+
+        def children_callback(*args):
+            self.cv.acquire()
+            self.cv.notify()
+            self.cv.release()
+
+        zookeeper.aget_children(
+            self.handle, "/zk-python-getchildrentest", watcher, children_callback)
+
+        self.cv.acquire()
+        self.cv.wait()
+        self.cv.release()
+
+        self.cv.acquire()
+        self.ensureCreated("/zk-python-getchildrentest/child2")
+        self.cv.wait(15)
+        self.assertTrue(watched)
+
 if __name__ == '__main__':
     unittest.main()