Merge "Merge "Remove blocking binder calls from system server" am: b7eb7b3579 am: 78d96ec2af" into rvc-dev-plus-aosp

This commit is contained in:
Automerger Merge Worker
2020-03-04 09:46:21 +00:00
committed by Android (Google) Code Review

View File

@@ -21,6 +21,7 @@ import android.content.pm.PackageManager;
import android.gsi.AvbPublicKey; import android.gsi.AvbPublicKey;
import android.gsi.GsiProgress; import android.gsi.GsiProgress;
import android.gsi.IGsiService; import android.gsi.IGsiService;
import android.gsi.IGsiServiceCallback;
import android.gsi.IGsid; import android.gsi.IGsid;
import android.os.Environment; import android.os.Environment;
import android.os.IBinder; import android.os.IBinder;
@@ -115,6 +116,20 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements
} }
} }
class GsiServiceCallback extends IGsiServiceCallback.Stub {
// 0 for success
private int mResult = -1;
public synchronized void onResult(int result) {
mResult = result;
notify();
}
public int getResult() {
return mResult;
}
}
@Override @Override
public boolean startInstallation(String dsuSlot) throws RemoteException { public boolean startInstallation(String dsuSlot) throws RemoteException {
IGsiService service = getGsiService(); IGsiService service = getGsiService();
@@ -186,7 +201,9 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements
@Override @Override
public boolean isInstalled() throws RemoteException { public boolean isInstalled() throws RemoteException {
return getGsiService().isGsiInstalled(); boolean installed = SystemProperties.getBoolean("gsid.image_installed", false);
Slog.i(TAG, "isInstalled(): " + installed);
return installed;
} }
@Override @Override
@@ -196,16 +213,37 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements
@Override @Override
public boolean remove() throws RemoteException { public boolean remove() throws RemoteException {
IGsiService gsiService = getGsiService(); try {
String install_dir = gsiService.getInstalledGsiImageDir(); GsiServiceCallback callback = new GsiServiceCallback();
return getGsiService().removeGsi(); synchronized (callback) {
getGsiService().removeGsiAsync(callback);
callback.wait(GSID_ROUGH_TIMEOUT_MS);
}
return callback.getResult() == 0;
} catch (InterruptedException e) {
Slog.e(TAG, "remove() was interrupted");
return false;
}
} }
@Override @Override
public boolean setEnable(boolean enable, boolean oneShot) throws RemoteException { public boolean setEnable(boolean enable, boolean oneShot) throws RemoteException {
IGsiService gsiService = getGsiService(); IGsiService gsiService = getGsiService();
if (enable) { if (enable) {
return gsiService.enableGsi(oneShot, mDsuSlot) == 0; try {
if (mDsuSlot == null) {
mDsuSlot = gsiService.getActiveDsuSlot();
}
GsiServiceCallback callback = new GsiServiceCallback();
synchronized (callback) {
gsiService.enableGsiAsync(oneShot, mDsuSlot, callback);
callback.wait(GSID_ROUGH_TIMEOUT_MS);
}
return callback.getResult() == 0;
} catch (InterruptedException e) {
Slog.e(TAG, "setEnable() was interrupted");
return false;
}
} else { } else {
return gsiService.disableGsi(); return gsiService.disableGsi();
} }