[
https://issues.apache.org/jira/browse/ZOOKEEPER-1023?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chris Nauroth updated ZOOKEEPER-1023:
-------------------------------------
Fix Version/s: (was: 3.5.2)
3.5.3
> zkpython: add_auth can deadlock the interpreter
> -----------------------------------------------
>
> Key: ZOOKEEPER-1023
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1023
> Project: ZooKeeper
> Issue Type: Bug
> Components: contrib-bindings
> Affects Versions: 3.3.2
> Reporter: Botond Hejj
> Priority: Minor
> Fix For: 3.6.0, 3.5.3
>
> Attachments: ZOOKEEPER-1023.patch
>
>
> 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.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)