You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Pavel Voronkin (JIRA)" <ji...@apache.org> on 2019/02/11 11:42:00 UTC
[jira] [Updated] (IGNITE-11288) Missing SO_LINGER in TcpDiscovery
and TcpCommunicationSpi causing SSLSocket.close() deadlock.
[ https://issues.apache.org/jira/browse/IGNITE-11288?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Voronkin updated IGNITE-11288:
------------------------------------
Description:
According to java8 SSLSocketImpl:
if (var1.isAlert((byte)0) && this.getSoLinger() >= 0) {
boolean var3 = Thread.interrupted();
try {
if (this.writeLock.tryLock((long)this.getSoLinger(), TimeUnit.SECONDS)) {
try {
this.writeRecordInternal(var1, var2);
} finally {
this.writeLock.unlock();
}
} else {
SSLException var4 = new SSLException("SO_LINGER timeout, close_notify message cannot be sent.");
if (this.isLayered() && !this.autoClose) {
this.fatal((byte)-1, (Throwable)var4);
} else if (debug != null && Debug.isOn("ssl")) {
System.out.println(Thread.currentThread().getName() + ", received Exception: " + var4);
}
this.sess.invalidate();
}
} catch (InterruptedException var14) {
var3 = true;
}
if (var3) {
Thread.currentThread().interrupt();
}
} else {
this.writeLock.lock();
try {
this.writeRecordInternal(var1, var2);
} finally {
this.writeLock.unlock();
}
}
In case of soLinger is not set we fallback to this.writeLock.lock(); which might fail forever.
> Missing SO_LINGER in TcpDiscovery and TcpCommunicationSpi causing SSLSocket.close() deadlock.
> ---------------------------------------------------------------------------------------------
>
> Key: IGNITE-11288
> URL: https://issues.apache.org/jira/browse/IGNITE-11288
> Project: Ignite
> Issue Type: Bug
> Reporter: Pavel Voronkin
> Priority: Critical
>
> According to java8 SSLSocketImpl:
> if (var1.isAlert((byte)0) && this.getSoLinger() >= 0) {
> boolean var3 = Thread.interrupted();
> try {
> if (this.writeLock.tryLock((long)this.getSoLinger(), TimeUnit.SECONDS)) {
> try {
> this.writeRecordInternal(var1, var2);
> } finally {
> this.writeLock.unlock();
> }
> } else {
> SSLException var4 = new SSLException("SO_LINGER timeout, close_notify message cannot be sent.");
> if (this.isLayered() && !this.autoClose) {
> this.fatal((byte)-1, (Throwable)var4);
> } else if (debug != null && Debug.isOn("ssl")) {
> System.out.println(Thread.currentThread().getName() + ", received Exception: " + var4);
> }
> this.sess.invalidate();
> }
> } catch (InterruptedException var14) {
> var3 = true;
> }
> if (var3) {
> Thread.currentThread().interrupt();
> }
> } else {
> this.writeLock.lock();
> try {
> this.writeRecordInternal(var1, var2);
> } finally {
> this.writeLock.unlock();
> }
> }
>
> In case of soLinger is not set we fallback to this.writeLock.lock(); which might fail forever.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)