okhttp: Use failing "source" for read bytes when sending GOAWAY due t… · grpc/grpc-java@ef1fe87
@@ -515,21 +515,6 @@ public Runnable start(Listener listener) {
515515serializingExecutor.execute(new Runnable() {
516516@Override
517517public void run() {
518-// This is a hack to make sure the connection preface and initial settings to be sent out
519-// without blocking the start. By doing this essentially prevents potential deadlock when
520-// network is not available during startup while another thread holding lock to send the
521-// initial preface.
522-try {
523-latch.await();
524-barrier.await(1000, TimeUnit.MILLISECONDS);
525- } catch (InterruptedException e) {
526-Thread.currentThread().interrupt();
527- } catch (TimeoutException | BrokenBarrierException e) {
528-startGoAway(0, ErrorCode.INTERNAL_ERROR, Status.UNAVAILABLE
529- .withDescription("Timed out waiting for second handshake thread. "
530- + "The transport executor pool may have run out of threads"));
531-return;
532- }
533518// Use closed source on failure so that the reader immediately shuts down.
534519BufferedSource source = Okio.buffer(new Source() {
535520@Override
@@ -549,6 +534,22 @@ public void close() {
549534Socket sock;
550535SSLSession sslSession = null;
551536try {
537+// This is a hack to make sure the connection preface and initial settings to be sent out
538+// without blocking the start. By doing this essentially prevents potential deadlock when
539+// network is not available during startup while another thread holding lock to send the
540+// initial preface.
541+try {
542+latch.await();
543+barrier.await(1000, TimeUnit.MILLISECONDS);
544+ } catch (InterruptedException e) {
545+Thread.currentThread().interrupt();
546+ } catch (TimeoutException | BrokenBarrierException e) {
547+startGoAway(0, ErrorCode.INTERNAL_ERROR, Status.UNAVAILABLE
548+ .withDescription("Timed out waiting for second handshake thread. "
549+ + "The transport executor pool may have run out of threads"));
550+return;
551+ }
552+552553if (proxiedAddr == null) {
553554sock = socketFactory.createSocket(address.getAddress(), address.getPort());
554555 } else {
@@ -1459,4 +1460,4 @@ public void alternateService(int streamId, String origin, ByteString protocol, S
14591460// TODO(madongfly): Deal with alternateService propagation
14601461 }
14611462 }
1462-}
1463+}