diff options
author | Daniel Xie <dxie@google.com> | 2016-04-26 04:17:21 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-04-26 04:17:21 +0000 |
commit | 113a90b61310ad6406ffcbf47b22bf16669c6726 (patch) | |
tree | 0a88903bd05eb9aba66c75e27d2f591c8593e879 | |
parent | 8857d6f3a31bfe14983f915cdbc72d40e473474e (diff) | |
parent | 386cd9c3cb57f05de6ee9aafdc4c0dd70cbd8cea (diff) | |
download | okhttp-113a90b61310ad6406ffcbf47b22bf16669c6726.tar.gz |
Merge "Fix a race closing MockSpdyPeer." into marshmallow-cts-dev am: 8284e5f
am: 386cd9c
* commit '386cd9c3cb57f05de6ee9aafdc4c0dd70cbd8cea':
Fix a race closing MockSpdyPeer.
Change-Id: I8c02d23e7d3792b6b3aae13d9a20b258e444e657
-rw-r--r-- | okhttp-tests/src/test/java/com/squareup/okhttp/internal/spdy/MockSpdyPeer.java | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/spdy/MockSpdyPeer.java b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/spdy/MockSpdyPeer.java index bc5499c..9dfebc8 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/spdy/MockSpdyPeer.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/spdy/MockSpdyPeer.java @@ -30,6 +30,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; +import java.util.logging.Logger; import okio.Buffer; import okio.BufferedSource; import okio.ByteString; @@ -37,6 +38,8 @@ import okio.Okio; /** Replays prerecorded outgoing frames and records incoming frames. */ public final class MockSpdyPeer implements Closeable { + private static final Logger logger = Logger.getLogger(MockSpdyPeer.class.getName()); + private int frameCount = 0; private boolean client = false; private Variant variant = new Spdy3(); @@ -122,7 +125,7 @@ public final class MockSpdyPeer implements Closeable { readAndWriteFrames(); } catch (IOException e) { Util.closeQuietly(MockSpdyPeer.this); - e.printStackTrace(); + logger.info(MockSpdyPeer.this + " done: " + e.getMessage()); } } }); @@ -131,6 +134,15 @@ public final class MockSpdyPeer implements Closeable { private void readAndWriteFrames() throws IOException { if (socket != null) throw new IllegalStateException(); socket = serverSocket.accept(); + + // Bail out now if this instance was closed while waiting for the socket to accept. + synchronized (this) { + if (executor.isShutdown()) { + socket.close(); + return; + } + } + OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); FrameReader reader = variant.newReader(Okio.buffer(Okio.source(in)), client); @@ -180,16 +192,12 @@ public final class MockSpdyPeer implements Closeable { @Override public synchronized void close() throws IOException { executor.shutdown(); - Socket socket = this.socket; - if (socket != null) { - Util.closeQuietly(socket); - this.socket = null; - } - ServerSocket serverSocket = this.serverSocket; - if (serverSocket != null) { - Util.closeQuietly(serverSocket); - this.serverSocket = null; - } + Util.closeQuietly(socket); + Util.closeQuietly(serverSocket); + } + + @Override public String toString() { + return "MockSpdyPeer[" + port + "]"; } private static class OutFrame { |