Patrick Hunt commented on ZOOKEEPER-666:
Yes, the subclassing issue in particular is nasty. We've fixed a number of
these in the server
implementation already (not all iirc). In this case I'm not sure if we can do
it in 3.3.0 though. It's too
near term and the solution for this is going to be disruptive - the main public
client interface needs
to be changed.
I suspect that we should
1) deprecate the existing constructors
2a) either add a new empty constructor and a "connect(connect, watcher,timeout)
2b) add a new empty constructor, methods; setconnect/setwatcher(have
alredy)/settimeout, and a connect() string
(or perhaps connect(connectstring), etc...) One nice thing about this rather
than 2a is that we can add new
parameters in future w/o changing/overloading the
existing users can migrate as they like (old methods deprecated)
> Unsafe publication in client API
> Key: ZOOKEEPER-666
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-666
> Project: Zookeeper
> Issue Type: Bug
> Components: java client
> Affects Versions: 3.2.2
> Reporter: Martin Traverso
> Fix For: 3.3.0
> The following code may result in a data race due to unsafe publication of a
> reference to "this". The call to cnxn.start() spawns threads that have access
> to the partially-constructed reference to the ZooKeeper object.
> See http://www.ibm.com/developerworks/java/library/j-jtp0618.html for some
> background info.
> public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
> throws IOException
> cnxn = new ClientCnxn(connectString, sessionTimeout, this,
> The obvious fix is to move the call to cnxn.start() into a separate start()
This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.