On 29/04/2019 13:00, Daniel Fuchs wrote:
Hi Alan,
On 29/04/2019 12:17, Alan Bateman wrote:
I don't think AbstractPlainSocketImpl.isBound needs to be volatile as
it is guarded by the synchronization on the impl (the doConnect and
bind methods are synchronized).
I see that it is set outside of any synchronized block
in AbstractPlainSocketImpl::bind
433 protected synchronized void bind(InetAddress address, int lport)
434 throws IOException
435 {
436 synchronized (fdLock) {
437 if (!closePending && !isBound) {
438 NetHooks.beforeTcpBind(fd, address, lport);
439 }
440 }
441 socketBind(address, lport);
442 isBound = true;
443 }
which for me justifies that it should be volatile.
I think you are might be mixing up the lock on the vs. fdLock. From what
I can tell, isBound is only accessed by doConnect and bind and they are
both synchronized methods.
-Alan