Chromium Code Reviews| Index: net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java |
| 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 a9ca6bd6173c71caa9109e36a93fed265bc5ef00..0d226980d31dd8ddb7b231b5328da5ad466e1ea4 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,34 +4,69 @@ |
| 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(); |
| - while (mKeepRunning.get()) { |
| - accept(); |
| + try { |
| + while (mKeepRunning.get()) { |
| + accept(); |
| + } |
| + } finally { |
| + serverHasStopped(); |
| } |
| } |
| - /** Waits for and handles an incoming request. */ |
| - protected abstract void 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); |
| + } |
| + } |
| + } |
| + } |
| - /** Returns the port on which this server is listening for connections. */ |
| - public abstract int getServerPort(); |
| + private void serverHasStarted() { |
| + synchronized (mLock) { |
|
mef
2015/05/07 15:59:56
If this method is called after waitForServerToStar
nyquist
2015/05/07 16:37:25
When wait is invoked, the thread releases the lock
|
| + mRunning = true; |
| + mLock.notifyAll(); |
| + } |
| + } |
| /** Stops the server. */ |
| public void stop() { |
| mKeepRunning.set(false); |
| } |
| + |
| + /** Waits for and handles an incoming request. */ |
| + protected abstract void accept(); |
| + |
| + private void serverHasStopped() { |
| + synchronized (mLock) { |
| + mRunning = false; |
| + mLock.notifyAll(); |
| + } |
| + } |
| } |