Uploaded image for project: 'ZooKeeper'
  1. ZooKeeper
  2. ZOOKEEPER-1023

zkpython: add_auth can deadlock the interpreter

    Details

    • Type: Bug
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: 3.3.2
    • Fix Version/s: 3.5.4, 3.6.0
    • Component/s: contrib-bindings
    • Labels:
      None

      Description

      If the add_auth method has a callback and we execute another command just after it than we can deadlock the python api.
      Example:

      def deadlock(a, b):
      pass

      def watcher(zh, type, state, path):
      if(state == zookeeper.CONNECTED_STATE):
      zookeeper.add_auth(zh, 'test', 'test', deadlock)
      zookeeper.get_children(zh, '/')

      zh = zookeeper.init("host:port", watcher)

      Looking at the code the problem looks like the following:
      get_children sync call is running on the main thread and have the GIL it blocks until the get_children finished. Meantime on the other thread the callback of add_auth is called and that tries to get the GIL to call the python callback. So this thread is waiting for the main thread to release the GIL but the main thread is waiting for the other thread to process the reply of get_children.

      I am not an expert on python binding but I think it can be solved if the GIL would be release before synchronous c api calls.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              botond.hejj Botond Hejj
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated: