qiaoqingjie created ZOOKEEPER-1739:
--------------------------------------

             Summary: thread safe bug in FastLeaderElection: instance of 
WorkerSender is not safe published, WorkerSender thread may see that 
WorkerSender.manager is the default value null
                 Key: ZOOKEEPER-1739
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1739
             Project: ZooKeeper
          Issue Type: Bug
          Components: leaderElection
    Affects Versions: 3.4.5
            Reporter: qiaoqingjie
            Priority: Minor


I am reading the trunk source code recently and find a thread-safe problem, but 
i'm not quite sure.

in FastLeaderElection:

class WorkerSender implements Runnable { 
    volatile boolean stop; 
    QuorumCnxManager manager; 

    WorkerSender(QuorumCnxManager manager){ 
        this.stop = false; 
        this.manager = manager; 
    } 

    public void run() {
 ...
    }
}

...

Messenger(QuorumCnxManager manager) {

    this.ws = new WorkerSender(manager);

    Thread t = new Thread(this.ws,
            "WorkerSender[myid=" + self.getId() + "]");
    t.setDaemon(true);
    t.start();

    this.wr = new WorkerReceiver(manager);

    t = new Thread(this.wr,
            "WorkerReceiver[myid=" + self.getId() + "]");
    t.setDaemon(true);
    t.start();
}
...

The instance of WorkerSender is constructed in main thread, and its field 
manager is assigned , and it is used in another thread. The later thread may 
see that WorkerSender.manager is the default value null. The solution may be:
(1) change 
WorkerSender(QuorumCnxManager manager){ 
        this.stop = false; 
        this.manager = manager; 
} 

to 

WorkerSender(QuorumCnxManager manager){ 
        this.manager = manager; 
        this.stop = false; 
} 

or(2)
change 
QuorumCnxManager manager; 

to 
final QuorumCnxManager manager;


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to