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

Mike Solomon commented on ZOOKEEPER-740:
----------------------------------------

The common cases is when you supply a watcher for a get().

Start a zk server on localhost and create a node /zk.

Connect a python process like this:

import sys
import zookeeper

zh = zookeeper.init('localhost:2181')

def _zk_callback(*args):
  print >> sys.stderr, "_zk_callback",  args

zookeeper.get(zh, '/zk', _zk_callback)

Kill the zk server. The client will idle fine. When restarting the zk server, I 
get a SIGSEGV on reconnect 100% of the time.

This is fixed by the following patch:

[msolomon]yuriko:~/src/zookeeper-3.3.1/src/contrib/zkpython> svn di
Index: src/c/zookeeper.c
===================================================================
--- src/c/zookeeper.c   (revision 951628)
+++ src/c/zookeeper.c   (working copy)
@@ -436,7 +436,9 @@
   if (PyObject_CallObject((PyObject*)callback, arglist) == NULL) {
     PyErr_Print();
   }
-  if (pyw->permanent == 0) {
+  // msolomon: when a session event happens, watchers get dispatched,
+  // but they are retained in the C client for dispatch again.
+  if (pyw->permanent == 0 && type != ZOO_SESSION_EVENT) {
     free_pywatcher(pyw);
   }
   PyGILState_Release(gstate);




> zkpython leading to segfault on zookeeper
> -----------------------------------------
>
>                 Key: ZOOKEEPER-740
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-740
>             Project: Zookeeper
>          Issue Type: Bug
>    Affects Versions: 3.3.0
>            Reporter: Federico
>            Assignee: Henry Robinson
>            Priority: Critical
>             Fix For: 3.4.0
>
>
> The program that we are implementing uses the python binding for zookeeper 
> but sometimes it crash with segfault; here is the bt from gdb:
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0xad244b70 (LWP 28216)]
> 0x080611d5 in PyObject_Call (func=0x862fab0, arg=0x8837194, kw=0x0)
>     at ../Objects/abstract.c:2488
> 2488    ../Objects/abstract.c: No such file or directory.
>         in ../Objects/abstract.c
> (gdb) bt
> #0  0x080611d5 in PyObject_Call (func=0x862fab0, arg=0x8837194, kw=0x0)
>     at ../Objects/abstract.c:2488
> #1  0x080d6ef2 in PyEval_CallObjectWithKeywords (func=0x862fab0,
>     arg=0x8837194, kw=0x0) at ../Python/ceval.c:3575
> #2  0x080612a0 in PyObject_CallObject (o=0x862fab0, a=0x8837194)
>     at ../Objects/abstract.c:2480
> #3  0x0047af42 in watcher_dispatch (zzh=0x86174e0, type=-1, state=1,
>     path=0x86337c8 "", context=0x8588660) at src/c/zookeeper.c:314
> #4  0x00496559 in do_foreach_watcher (zh=0x86174e0, type=-1, state=1,
>     path=0x86337c8 "", list=0xa5354140) at src/zk_hashtable.c:275
> #5  deliverWatchers (zh=0x86174e0, type=-1, state=1, path=0x86337c8 "",
>     list=0xa5354140) at src/zk_hashtable.c:317
> #6  0x0048ae3c in process_completions (zh=0x86174e0) at src/zookeeper.c:1766
> #7  0x0049706b in do_completion (v=0x86174e0) at src/mt_adaptor.c:333
> #8  0x0013380e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
> #9  0x002578de in clone () from /lib/tls/i686/cmov/libc.so.6

-- 
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