aboutsummaryrefslogtreecommitdiffstats
path: root/jrt/src/com/yahoo/jrt/Transport.java
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@gmail.com>2019-02-25 15:35:20 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-02-28 15:34:37 +0100
commit19b3abbef47ccc08665af54dc8afcef2e49027a5 (patch)
tree0c81293ce887650ecc20ccd6cabc8030d27d3e7d /jrt/src/com/yahoo/jrt/Transport.java
parente54f48c4ed75f588a5ba8accf2a4aa5de44bd0c0 (diff)
async tls handshake in jrt
Diffstat (limited to 'jrt/src/com/yahoo/jrt/Transport.java')
-rw-r--r--jrt/src/com/yahoo/jrt/Transport.java42
1 files changed, 37 insertions, 5 deletions
diff --git a/jrt/src/com/yahoo/jrt/Transport.java b/jrt/src/com/yahoo/jrt/Transport.java
index 0a2f2a4b7cb..33ce6fe6ed0 100644
--- a/jrt/src/com/yahoo/jrt/Transport.java
+++ b/jrt/src/com/yahoo/jrt/Transport.java
@@ -52,6 +52,12 @@ public class Transport {
public void run() { handleEnableWrite(conn); }
}
+ private class HandshakeWorkDoneCmd implements Runnable {
+ private Connection conn;
+ HandshakeWorkDoneCmd(Connection conn) { this.conn = conn; }
+ public void run() { handleHandshakeWorkDone(conn); }
+ }
+
private class SyncCmd implements Runnable {
boolean done = false;
public synchronized void waitDone() {
@@ -73,7 +79,7 @@ public class Transport {
private Queue queue;
private Queue myQueue;
private Connector connector;
- private Closer closer;
+ private Worker worker;
private Scheduler scheduler;
private int state;
private Selector selector;
@@ -82,7 +88,7 @@ public class Transport {
private void handleAddConnection(Connection conn) {
if (conn.isClosed()) {
if (conn.hasSocket()) {
- closer.closeLater(conn);
+ worker.closeLater(conn);
}
return;
}
@@ -97,7 +103,7 @@ public class Transport {
}
conn.fini();
if (conn.hasSocket()) {
- closer.closeLater(conn);
+ worker.closeLater(conn);
}
}
@@ -108,6 +114,18 @@ public class Transport {
conn.enableWrite();
}
+ private void handleHandshakeWorkDone(Connection conn) {
+ if (conn.isClosed()) {
+ return;
+ }
+ try {
+ conn.handleHandshakeWorkDone();
+ } catch (IOException e) {
+ conn.setLostReason(e);
+ handleCloseConnection(conn);
+ }
+ }
+
private boolean postCommand(Runnable cmd) {
boolean wakeup;
synchronized (this) {
@@ -174,7 +192,7 @@ public class Transport {
queue = new Queue();
myQueue = new Queue();
connector = new Connector(this);
- closer = new Closer(this);
+ worker = new Worker(this);
scheduler = new Scheduler(System.currentTimeMillis());
state = OPEN;
try {
@@ -287,6 +305,20 @@ public class Transport {
}
}
+ void handshakeWorkDone(Connection conn) {
+ postCommand(new HandshakeWorkDoneCmd(conn));
+ }
+
+ /**
+ * Request that {@link Connection#doHandshakeWork()} be called (in any thread)
+ * followed by a call to {@link Connection#handleHandshakeWorkDone()} from the transport thread.
+ *
+ * @param conn the connection needing handshake work
+ */
+ void doHandshakeWork(Connection conn) {
+ worker.doHandshakeWork(conn);
+ }
+
/**
* Create a {@link Task} that can be scheduled for execution in
* the transport thread.
@@ -379,7 +411,7 @@ public class Transport {
handleCloseConnection(conn);
}
try { selector.close(); } catch (Exception e) {}
- closer.shutdown().join();
+ worker.shutdown().join();
connector.exit().join();
try { cryptoEngine.close(); } catch (Exception e) {}
}