Merge "Fix a possible system server crash" am: 51176d0a67 am: d79bd5c622
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1771187 Change-Id: Id71b3d6e530a053b1950ed9cecbf74a83b36b4e8
This commit is contained in:
@@ -280,6 +280,7 @@ import android.os.HandlerThread;
|
||||
import android.os.IBinder;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.os.Looper;
|
||||
import android.os.Messenger;
|
||||
import android.os.Parcel;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.os.Parcelable;
|
||||
@@ -2168,6 +2169,45 @@ public class ConnectivityServiceTest {
|
||||
mCm.unregisterNetworkCallback(fgMobileListenCallback);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBinderDeathAfterUnregister() throws Exception {
|
||||
final NetworkCapabilities caps = new NetworkCapabilities.Builder()
|
||||
.addTransportType(TRANSPORT_WIFI)
|
||||
.build();
|
||||
final Handler handler = new Handler(ConnectivityThread.getInstanceLooper());
|
||||
final Messenger messenger = new Messenger(handler);
|
||||
final CompletableFuture<Binder.DeathRecipient> deathRecipient = new CompletableFuture<>();
|
||||
final Binder binder = new Binder() {
|
||||
private DeathRecipient mDeathRecipient;
|
||||
@Override
|
||||
public void linkToDeath(@NonNull final DeathRecipient recipient, final int flags) {
|
||||
synchronized (this) {
|
||||
mDeathRecipient = recipient;
|
||||
}
|
||||
super.linkToDeath(recipient, flags);
|
||||
deathRecipient.complete(recipient);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean unlinkToDeath(@NonNull final DeathRecipient recipient, final int flags) {
|
||||
synchronized (this) {
|
||||
if (null == mDeathRecipient) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
mDeathRecipient = null;
|
||||
}
|
||||
return super.unlinkToDeath(recipient, flags);
|
||||
}
|
||||
};
|
||||
final NetworkRequest request = mService.listenForNetwork(caps, messenger, binder,
|
||||
NetworkCallback.FLAG_NONE, mContext.getOpPackageName(),
|
||||
mContext.getAttributionTag());
|
||||
mService.releaseNetworkRequest(request);
|
||||
deathRecipient.get().binderDied();
|
||||
// Wait for the release message to be processed.
|
||||
waitForIdle();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidatedCellularOutscoresUnvalidatedWiFi() throws Exception {
|
||||
// Test bringing up unvalidated WiFi
|
||||
|
||||
Reference in New Issue
Block a user