diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java index f540f10f00..c833422432 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsDiscoveryManager.java @@ -35,7 +35,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.net.module.util.DnsUtils; import com.android.net.module.util.HandlerUtils; import com.android.net.module.util.SharedLog; -import com.android.server.connectivity.mdns.util.MdnsUtils; import java.io.IOException; import java.io.PrintWriter; @@ -211,7 +210,7 @@ public class MdnsDiscoveryManager implements MdnsSocketClientBase.Callback { void ensureRunningOnHandlerThread() { synchronized (pendingTasks) { - MdnsUtils.ensureRunningOnHandlerThread(handler); + HandlerUtils.ensureRunningOnHandlerThread(handler); } } diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java index c575d407c3..36fad31746 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsMultinetworkSocketClient.java @@ -16,7 +16,7 @@ package com.android.server.connectivity.mdns; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java index db3845abe5..a89b004473 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java @@ -16,9 +16,9 @@ package com.android.server.connectivity.mdns; +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import static com.android.server.connectivity.mdns.MdnsConstants.IPV4_SOCKET_ADDR; import static com.android.server.connectivity.mdns.MdnsConstants.IPV6_SOCKET_ADDR; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; import android.annotation.NonNull; import android.annotation.RequiresApi; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceCache.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceCache.java index 22f7a033d0..4ae87011c2 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceCache.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceCache.java @@ -18,8 +18,8 @@ package com.android.server.connectivity.mdns; import static com.android.net.module.util.DnsUtils.equalsIgnoreDnsCase; import static com.android.net.module.util.DnsUtils.toDnsUpperCase; +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import static com.android.server.connectivity.mdns.MdnsResponse.EXPIRATION_NEVER; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; import static java.lang.Math.min; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java index b0e3ba42cb..4f015991b0 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java @@ -16,12 +16,12 @@ package com.android.server.connectivity.mdns; +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import static com.android.server.connectivity.mdns.MdnsSearchOptions.AGGRESSIVE_QUERY_MODE; import static com.android.server.connectivity.mdns.MdnsServiceCache.ServiceExpiredCallback; import static com.android.server.connectivity.mdns.MdnsServiceCache.findMatchedResponse; import static com.android.server.connectivity.mdns.util.MdnsUtils.Clock; import static com.android.server.connectivity.mdns.util.MdnsUtils.buildMdnsServiceInfoFromResponse; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; import android.annotation.NonNull; import android.annotation.Nullable; diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java index 5c9ec09e49..b640c3258e 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsSocketProvider.java @@ -19,7 +19,8 @@ package com.android.server.connectivity.mdns; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; + +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import static com.android.server.connectivity.mdns.util.MdnsUtils.isNetworkMatched; import android.annotation.NonNull; diff --git a/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java b/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java index 70451f3d55..4d7e4bccf9 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java +++ b/service-t/src/com/android/server/connectivity/mdns/MulticastPacketReader.java @@ -16,7 +16,7 @@ package com.android.server.connectivity.mdns; -import static com.android.server.connectivity.mdns.util.MdnsUtils.ensureRunningOnHandlerThread; +import static com.android.net.module.util.HandlerUtils.ensureRunningOnHandlerThread; import android.annotation.NonNull; import android.os.Handler; diff --git a/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java b/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java index 85a8961d69..41b15ddd24 100644 --- a/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java +++ b/service-t/src/com/android/server/connectivity/mdns/util/MdnsUtils.java @@ -24,7 +24,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Network; import android.os.Build; -import android.os.Handler; import android.os.SystemClock; import android.util.ArraySet; import android.util.Pair; @@ -88,21 +87,6 @@ public class MdnsUtils { } } - /*** Ensure that current running thread is same as given handler thread */ - public static void ensureRunningOnHandlerThread(@NonNull Handler handler) { - if (!isRunningOnHandlerThread(handler)) { - throw new IllegalStateException( - "Not running on Handler thread: " + Thread.currentThread().getName()); - } - } - - /*** Check that current running thread is same as given handler thread */ - public static boolean isRunningOnHandlerThread(@NonNull Handler handler) { - if (handler.getLooper().getThread() == Thread.currentThread()) { - return true; - } - return false; - } /*** Check whether the target network matches the current network */ public static boolean isNetworkMatched(@Nullable Network targetNetwork, diff --git a/staticlibs/device/com/android/net/module/util/HandlerUtils.java b/staticlibs/device/com/android/net/module/util/HandlerUtils.java index c620368fc2..991df8f3f7 100644 --- a/staticlibs/device/com/android/net/module/util/HandlerUtils.java +++ b/staticlibs/device/com/android/net/module/util/HandlerUtils.java @@ -102,4 +102,37 @@ public class HandlerUtils { if (e != null) throw e; return true; } + + /** + * Ensures that the current running thread is the same as the thread associated with the given + * handler. + * + * @param handler The handler whose thread to compare. + * @throws IllegalStateException if the thread associated with the given handler is not the same + * as the current running thread. + * @hide + */ + public static void ensureRunningOnHandlerThread(@NonNull Handler handler) { + if (!isRunningOnHandlerThread(handler)) { + throw new IllegalStateException( + "Not running on Handler thread: " + Thread.currentThread().getName()); + } + } + + /** + * Checks if the current running thread is the same as the thread associated with the given + * handler. + * + * @param handler The handler whose thread to compare. + * @return {@code true} if the thread associated with the given handler is the same as the + * current running thread, {@code false} otherwise. + * + * @hide + */ + public static boolean isRunningOnHandlerThread(@NonNull Handler handler) { + if (handler.getLooper().getThread() == Thread.currentThread()) { + return true; + } + return false; + } } diff --git a/staticlibs/tests/unit/src/com/android/net/module/util/HandlerUtilsTest.kt b/staticlibs/tests/unit/src/com/android/net/module/util/HandlerUtilsTest.kt index f2c902f7ce..845a2c37b5 100644 --- a/staticlibs/tests/unit/src/com/android/net/module/util/HandlerUtilsTest.kt +++ b/staticlibs/tests/unit/src/com/android/net/module/util/HandlerUtilsTest.kt @@ -19,11 +19,14 @@ package com.android.net.module.util import android.os.HandlerThread import com.android.testutils.DevSdkIgnoreRunner import com.android.testutils.DevSdkIgnoreRunner.MonitorThreadLeak +import com.android.testutils.waitForIdle import kotlin.test.assertEquals import kotlin.test.assertTrue import org.junit.After import org.junit.Test import org.junit.runner.RunWith +import kotlin.test.assertFailsWith +import kotlin.test.assertFalse const val THREAD_BLOCK_TIMEOUT_MS = 1000L const val TEST_REPEAT_COUNT = 100 @@ -52,6 +55,24 @@ class HandlerUtilsTest { } } + @Test + fun testIsRunningOnHandlerThread() { + assertFalse(HandlerUtils.isRunningOnHandlerThread(handler)) + handler.post{ + assertTrue(HandlerUtils.isRunningOnHandlerThread(handler)) + } + handler.waitForIdle(THREAD_BLOCK_TIMEOUT_MS) + } + + @Test + fun testEnsureRunningOnHandlerThread() { + assertFailsWith{ HandlerUtils.ensureRunningOnHandlerThread(handler) } + handler.post{ + HandlerUtils.ensureRunningOnHandlerThread(handler) + } + handler.waitForIdle(THREAD_BLOCK_TIMEOUT_MS) + } + @After fun tearDown() { handlerThread.quitSafely()