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:
Chalard Jean
2021-07-27 05:12:15 +00:00
committed by Automerger Merge Worker
2 changed files with 47 additions and 1 deletions

View File

@@ -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