OSDN Git Service

Prevent DumpRenderTree2 from crashing when the host server is not running
authorSteve Block <steveblock@google.com>
Tue, 28 Sep 2010 12:48:44 +0000 (13:48 +0100)
committerSteve Block <steveblock@google.com>
Tue, 28 Sep 2010 13:21:03 +0000 (14:21 +0100)
Bug: 3010758
Change-Id: I04a01634544d223d225b264827d3cf18be74e1e0

tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/AdbUtils.java
tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/ConnectionHandler.java
tests/DumpRenderTree2/src/com/android/dumprendertree2/forwarder/Forwarder.java

index 086ff59..224509d 100644 (file)
@@ -40,15 +40,10 @@ public class AdbUtils {
      * remote machine. This can be achieved by calling configureSocket()
      *
      * @return a socket that can be configured to link to remote machine
+     * @throws IOException
      */
-    public static Socket createSocket() {
-        Socket socket = null;
-        try {
-            socket = new Socket(ADB_HOST, ADB_PORT);
-        } catch (IOException e) {
-            Log.e(LOG_TAG, "Creation failed.", e);
-        }
-        return socket;
+    public static Socket createSocket() throws IOException{
+        return new Socket(ADB_HOST, ADB_PORT);
     }
 
     /**
@@ -72,9 +67,9 @@ public class AdbUtils {
         outputStream.write(cmd.getBytes());
         int read = inputStream.read(buf);
         if (read != ADB_RESPONSE_SIZE || !ADB_OK.equals(new String(buf))) {
-            Log.w(LOG_TAG, "adb cmd faild.");
+            Log.w(LOG_TAG, "adb cmd failed.");
             return false;
         }
         return true;
     }
-}
\ No newline at end of file
+}
index 4f01dae..f19cd41 100644 (file)
@@ -93,7 +93,8 @@ public class ConnectionHandler {
 
     private OnFinishedCallback mOnFinishedCallback;
 
-    public ConnectionHandler(String remoteMachineIp, int port, Socket fromSocket, Socket toSocket) {
+    public ConnectionHandler(String remoteMachineIp, int port, Socket fromSocket, Socket toSocket)
+            throws IOException {
         mRemoteMachineIpAddress = remoteMachineIp;
         mPort = port;
 
@@ -105,14 +106,12 @@ public class ConnectionHandler {
             mToSocketInputStream = mToSocket.getInputStream();
             mFromSocketOutputStream = mFromSocket.getOutputStream();
             mToSocketOutputStream = mToSocket.getOutputStream();
-            if (!AdbUtils.configureConnection(mToSocketInputStream, mToSocketOutputStream,
-                    mRemoteMachineIpAddress, mPort)) {
-                throw new IOException("Configuring socket failed!");
-            }
+            AdbUtils.configureConnection(mToSocketInputStream, mToSocketOutputStream,
+                    mRemoteMachineIpAddress, mPort);
         } catch (IOException e) {
             Log.e(LOG_TAG, "Unable to start ConnectionHandler", e);
             closeStreams();
-            return;
+            throw e;
         }
 
         mFromToPipe = new SocketPipeThread(mFromSocketInputStream, mToSocketOutputStream);
@@ -170,4 +169,4 @@ public class ConnectionHandler {
             }
         }
     }
-}
\ No newline at end of file
+}
index b361a89..ce22fa0 100644 (file)
@@ -61,7 +61,6 @@ public class Forwarder extends Thread {
     public void run() {
         while (true) {
             Socket localSocket;
-            Socket remoteSocket;
             try {
                 localSocket = mServerSocket.accept();
             } catch (IOException e) {
@@ -70,24 +69,28 @@ public class Forwarder extends Thread {
                 break;
             }
 
-            remoteSocket = AdbUtils.createSocket();
-
-            if (remoteSocket == null) {
+            Socket remoteSocket = null;
+            final ConnectionHandler connectionHandler;
+            try {
+                remoteSocket = AdbUtils.createSocket();
+                connectionHandler = new ConnectionHandler(
+                        mRemoteMachineIpAddress, mPort, localSocket, remoteSocket);
+            } catch (IOException exception) {
                 try {
                     localSocket.close();
                 } catch (IOException e) {
                     Log.e(LOG_TAG, "mPort=" + mPort, e);
                 }
-
-                Log.e(LOG_TAG, "run(): mPort= " + mPort + " Failed to start forwarding from " +
-                        localSocket);
+                if (remoteSocket != null) {
+                    try {
+                        remoteSocket.close();
+                    } catch (IOException e) {
+                        Log.e(LOG_TAG, "mPort=" + mPort, e);
+                    }
+                }
                 continue;
             }
 
-            final ConnectionHandler connectionHandler =
-                    new ConnectionHandler(mRemoteMachineIpAddress, mPort, localSocket,
-                            remoteSocket);
-
             /**
              * We have to close the sockets after the ConnectionHandler finishes, so we
              * don't get "Too may open files" exception. We also remove the ConnectionHandler
@@ -126,4 +129,4 @@ public class Forwarder extends Thread {
             Log.e(LOG_TAG, "mPort=" + mPort, e);
         }
     }
-}
\ No newline at end of file
+}