diff --git a/expectations/knownfailures.txt b/expectations/knownfailures.txt
index 5dd1d1e..6c14660 100644
--- a/expectations/knownfailures.txt
+++ b/expectations/knownfailures.txt
@@ -1426,6 +1426,13 @@
   ]
 },
 {
+  description: "OkHttp flaky test of functionality that's not used on Android",
+  bug: 138134183,
+  names: [
+    "com.squareup.okhttp.internal.framed.Spdy3ConnectionTest#serverSendsSettingsToClient"
+  ]
+},
+{
   description: "libcore.java.text.DecimalFormatSymbolsTest#test_getInstance_unknown_or_invalid_locale assumes fallback to locale other than en_US_POSIX.",
   bug: 17422813,
   names: [
diff --git a/luni/src/test/java/libcore/java/net/OldSocketTest.java b/luni/src/test/java/libcore/java/net/OldSocketTest.java
index 8a577fb..644fe52 100644
--- a/luni/src/test/java/libcore/java/net/OldSocketTest.java
+++ b/luni/src/test/java/libcore/java/net/OldSocketTest.java
@@ -20,6 +20,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.net.BindException;
 import java.net.ConnectException;
 import java.net.Inet4Address;
@@ -37,6 +39,7 @@
 import java.nio.channels.IllegalBlockingModeException;
 import java.nio.channels.SocketChannel;
 import java.security.Permission;
+import java.util.concurrent.atomic.AtomicReference;
 import libcore.junit.util.ResourceLeakageDetector.DisableResourceLeakageDetection;
 import tests.support.Support_Configuration;
 
@@ -1266,39 +1269,37 @@
         }
     }
 
-    @DisableResourceLeakageDetection(
-            why = "Strange threading behavior causes resource leak",
-            bug = "31820278")
     public void test_connectLjava_net_SocketAddressI_setSOTimeout() throws Exception {
+        final AtomicReference<Exception> exceptionRef = new AtomicReference<>();
+
         class SocketConnector extends Thread {
+            private final int timeout;
+            private final Socket theSocket;
+            private final SocketAddress address;
 
-            int timeout = 0;
-
-            Socket theSocket = null;
-
-            SocketAddress address = null;
-
+            @Override
             public void run() {
                 try {
                     theSocket.connect(address, timeout);
                 } catch (Exception e) {
+                    exceptionRef.set(e);
                 }
-
-                return;
             }
 
-            public SocketConnector(int timeout, Socket theSocket,
-                    SocketAddress address) {
+            private SocketConnector(int timeout, Socket theSocket, SocketAddress address) {
                 this.timeout = timeout;
                 this.theSocket = theSocket;
                 this.address = address;
             }
         }
 
-        // now try to set options while we are connecting
-        SocketAddress nonReachableAddress = UNREACHABLE_ADDRESS;
-        try (Socket theSocket = new Socket()) {
-            SocketConnector connector = new SocketConnector(5000, theSocket, nonReachableAddress);
+        // Now try to set options while we are connecting
+        try (final Socket theSocket = new Socket()) {
+            // Force SocketImpl creation to prevent race between connect() and setSoTimeout()
+            // creating it. b/144258500
+            theSocket.getSoTimeout();
+            final SocketConnector connector
+                = new SocketConnector(5000, theSocket, UNREACHABLE_ADDRESS);
             connector.start();
             theSocket.setSoTimeout(1000);
             Thread.sleep(10);
@@ -1308,10 +1309,21 @@
             theSocket.setSoTimeout(2000);
             assertTrue("Socket option not set during connect: 50 ",
                     Math.abs(2000 - theSocket.getSoTimeout()) <= 10);
-            Thread.sleep(5000);
+            connector.join();
+            Exception e = exceptionRef.get();
+            if (!(e instanceof SocketTimeoutException)) {
+                fail(printStackTraceToString(e));
+            }
         }
     }
 
+    private String printStackTraceToString(Throwable throwable) {
+        StringWriter writer = new StringWriter();
+        throwable.printStackTrace(new PrintWriter(writer));
+        return writer.toString();
+    }
+
+
     public void test_isInputShutdown() throws IOException {
         Socket theSocket = new Socket();
         ServerSocket serverSocket = new ServerSocket(0, 5);
diff --git a/support/src/test/java/libcore/java/security/CpuFeatures.java b/support/src/test/java/libcore/java/security/CpuFeatures.java
index 4c4c8a00..8ab610f 100644
--- a/support/src/test/java/libcore/java/security/CpuFeatures.java
+++ b/support/src/test/java/libcore/java/security/CpuFeatures.java
@@ -44,7 +44,7 @@
             }
         } else if (instructionSet.startsWith("x86")) {
             // x86 CPUs with the "aes" flag and running in 64bit mode should have hardware AES.
-            if (VMRuntime.is64BitInstructionSet(instructionSet)) {
+            if ("x86_64".equals(instructionSet)) {
                 List<String> flags = getListFromCpuinfo("flags");
                 if (flags != null && flags.contains("aes")) {
                     return true;
