diff options
author | jbudorick <jbudorick@chromium.org> | 2015-05-11 00:44:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-11 07:45:20 +0000 |
commit | 1ce809f9a732b049e4c0bd7ea54d454ca48537d9 (patch) | |
tree | ae808f79f55b14124a5858bde3e82627a71ee3e7 /net/test/android | |
parent | ee7ac89538656c63c1afbff25bf10bcc0bf2bdd8 (diff) | |
download | chromium_src-1ce809f9a732b049e4c0bd7ea54d454ca48537d9.zip chromium_src-1ce809f9a732b049e4c0bd7ea54d454ca48537d9.tar.gz chromium_src-1ce809f9a732b049e4c0bd7ea54d454ca48537d9.tar.bz2 |
[Android] Fix race condition in BaseTestServer.
BUG=485417
Review URL: https://codereview.chromium.org/1131803002
Cr-Commit-Position: refs/heads/master@{#329111}
Diffstat (limited to 'net/test/android')
-rw-r--r-- | net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java index a9ca6bd..c54de3d 100644 --- a/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java +++ b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java @@ -4,23 +4,54 @@ package org.chromium.net.test; +import org.chromium.base.Log; + import java.util.concurrent.atomic.AtomicBoolean; /** A base class for simple test servers. */ public abstract class BaseTestServer implements Runnable { + private static final String TAG = Log.makeTag("net.test"); + private AtomicBoolean mKeepRunning; + private final Object mLock; + private boolean mRunning; /** Creates a test server. */ public BaseTestServer() { mKeepRunning = new AtomicBoolean(true); + mLock = new Object(); } /** Accepts incoming connections until stopped via stop(). */ public void run() { - mKeepRunning.set(true); + serverHasStarted(); + + try { + while (mKeepRunning.get()) { + accept(); + } + } finally { + serverHasStopped(); + } + } - while (mKeepRunning.get()) { - accept(); + /** Waits for the server to start. */ + public void waitForServerToStart() { + synchronized (mLock) { + while (!mRunning) { + try { + mLock.wait(); + } catch (InterruptedException e) { + Log.e(TAG, "Interrupted while waiting for server to stop.", e); + } + } + } + } + + private void serverHasStarted() { + synchronized (mLock) { + mRunning = true; + mLock.notifyAll(); } } @@ -34,4 +65,11 @@ public abstract class BaseTestServer implements Runnable { public void stop() { mKeepRunning.set(false); } + + private void serverHasStopped() { + synchronized (mLock) { + mRunning = false; + mLock.notifyAll(); + } + } } |