Merge "fix synchronization in PM and PowerHal" into nyc-car-dev
diff --git a/service/src/com/android/car/hal/PowerHalService.java b/service/src/com/android/car/hal/PowerHalService.java
index 86bf78e..580e7a7 100644
--- a/service/src/com/android/car/hal/PowerHalService.java
+++ b/service/src/com/android/car/hal/PowerHalService.java
@@ -278,7 +278,8 @@
}
@Override
- public List<VehiclePropConfig> takeSupportedProperties(List<VehiclePropConfig> allProperties) {
+ public synchronized List<VehiclePropConfig> takeSupportedProperties(
+ List<VehiclePropConfig> allProperties) {
for (VehiclePropConfig config : allProperties) {
switch (config.getProp()) {
case VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE:
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index a13bf4d..9d02973 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -277,6 +277,11 @@
}
synchronized (this) {
mHandler.requestRelease();
+ // wait for release do be done. This guarantees that init is done.
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ }
mSystemWhitelists.clear();
mClientPolicies.clear();
if (mProxies != null) {
@@ -296,14 +301,24 @@
private void doHandleInit() {
startAppBlockingPolicies();
generateSystemWhitelists();
- mSensorService.registerOrUpdateSensorListener(
- CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, 0, mDrivingStateListener);
+ try {
+ mSensorService.registerOrUpdateSensorListener(
+ CarSensorManager.SENSOR_TYPE_DRIVING_STATUS, 0, mDrivingStateListener);
+ } catch (IllegalArgumentException e) {
+ // can happen while mocking is going on while init is still done.
+ Log.w(CarLog.TAG_PACKAGE, "sensor subscription failed", e);
+ return;
+ }
mDrivingStateListener.resetState();
mSystemActivityMonitoringService.registerActivityLaunchListener(
mActivityLaunchListener);
blockTopActivitiesIfNecessary();
}
+ private synchronized void doHandleRelease() {
+ notifyAll();
+ }
+
private void wakeupClientsWaitingForPolicySetitngLocked() {
for (CarAppBlockingPolicy waitingPolicy : mWaitingPolicies) {
synchronized (waitingPolicy) {
@@ -670,6 +685,7 @@
private final int MSG_INIT = 0;
private final int MSG_SET_POLICY = 1;
private final int MSG_UPDATE_POLICY = 2;
+ private final int MSG_RELEASE = 3;
private PackageHandler(Looper looper) {
super(looper);
@@ -684,6 +700,8 @@
removeMessages(MSG_INIT);
removeMessages(MSG_SET_POLICY);
removeMessages(MSG_UPDATE_POLICY);
+ Message msg = obtainMessage(MSG_RELEASE);
+ sendMessage(msg);
}
private void requestPolicySetting() {
@@ -712,6 +730,9 @@
(Pair<String, CarAppBlockingPolicy>) msg.obj;
doUpdatePolicy(pair.first, pair.second, msg.arg1);
break;
+ case MSG_RELEASE:
+ doHandleRelease();
+ break;
}
}
}