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)
This commit is contained in:
committed by
Mark Chien
parent
c9a82f2dfc
commit
f90ad41c07
@@ -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());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user