You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Hongchao Deng (JIRA)" <ji...@apache.org> on 2015/01/27 20:25:35 UTC

[jira] [Updated] (ZOOKEEPER-2111) Not isAlive states should be synchronized in ClientCnxn

     [ https://issues.apache.org/jira/browse/ZOOKEEPER-2111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hongchao Deng updated ZOOKEEPER-2111:
-------------------------------------
    Attachment: ZOOKEEPER-2111.patch

This patch add synchronized blocks on not-isAlive state. The test is hard to reproduce so I am ignoring it.

> Not isAlive states should be synchronized in ClientCnxn
> -------------------------------------------------------
>
>                 Key: ZOOKEEPER-2111
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2111
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: java client
>            Reporter: Hongchao Deng
>            Assignee: Hongchao Deng
>         Attachments: ZOOKEEPER-2111.patch
>
>
> In ClientCnxn.queuePacket, it checks variables of state and closing and then make decisions. There is toctou race in queuePacket():
> {code}
>         if (!state.isAlive() || closing) {
>             conLossPacket(packet);
>         } else {
>             ...
>         }
> {code}
> A possible race:
> in SendThread.run():
> {code}
>   while (state.isAlive()) {
>     ...
>   }
>   cleanup();
> {code}
> When it checks in queuePacket(), state is still alive. Then state isn't alive, SendThread.run() cleans up outgoingQueue. Then queuePacket adds packet to outgoingQueue. The packet should be waken up with exception. But it won't at this case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)