[ https://issues.apache.org/jira/browse/ZOOKEEPER-2111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14294277#comment-14294277 ]
Hongchao Deng commented on ZOOKEEPER-2111: ------------------------------------------ [~fpj] There is a problem in ZOOKEEPER-2069 patch. I would like to get this in to fix 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)