summaryrefslogtreecommitdiff
path: root/core/java/android/net/EthernetManager.java
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-28 03:42:44 +0000
committerMark Chien <markchien@google.com>2020-03-09 02:02:23 +0000
commit06fe92de0fcb85c2bebdd7bccb56c4b761bdbcee (patch)
tree1dd8e89055fe72b8882b81f4cfe662a11847bc37 /core/java/android/net/EthernetManager.java
parentfde3c9ac591506a1c69159a0b377aa4cfa01c537 (diff)
Fix crash and duplicated ethernet tethering request
This change fix two things: 1. Handle ethernet callback in internal thread to avoid crash. IpServer should be created from tethering thread, otherwise mIpNeighborMonitor of IpServer would throw IllegalStateException("start() called from off-thread") 2. Ethernet tethering request may be duplicated if multiple startTethering is called but no stopTethering Bug: 130840861 Bug: 148824036 Test: ON/OFF ethernet tehtering manually atest TetheringTests Change-Id: Ibd3ea6bc6751bd65647ff381f9b0124bc3395c09 Merged-In: I7c5127e96d80d077735010d2e62c7227805ccb10 Merged-In: Ibd3ea6bc6751bd65647ff381f9b0124bc3395c09 (cherry picked from commit 72702b979654234c18045f04270040056a74cf90)
Diffstat (limited to 'core/java/android/net/EthernetManager.java')
-rw-r--r--core/java/android/net/EthernetManager.java10
1 files changed, 6 insertions, 4 deletions
diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java
index a3899b705c1b..139f5bebcd89 100644
--- a/core/java/android/net/EthernetManager.java
+++ b/core/java/android/net/EthernetManager.java
@@ -28,6 +28,7 @@ import android.os.RemoteException;
import java.util.ArrayList;
import java.util.Objects;
+import java.util.concurrent.Executor;
/**
* A class representing the IP configuration of the Ethernet network.
@@ -248,18 +249,19 @@ public class EthernetManager {
* @param callback A callback to be called once the request has been fulfilled.
*/
@NonNull
- public TetheredInterfaceRequest requestTetheredInterface(
- @NonNull TetheredInterfaceCallback callback) {
+ public TetheredInterfaceRequest requestTetheredInterface(@NonNull final Executor executor,
+ @NonNull final TetheredInterfaceCallback callback) {
Objects.requireNonNull(callback, "Callback must be non-null");
+ Objects.requireNonNull(executor, "Executor must be non-null");
final ITetheredInterfaceCallback cbInternal = new ITetheredInterfaceCallback.Stub() {
@Override
public void onAvailable(String iface) {
- callback.onAvailable(iface);
+ executor.execute(() -> callback.onAvailable(iface));
}
@Override
public void onUnavailable() {
- callback.onUnavailable();
+ executor.execute(() -> callback.onUnavailable());
}
};