summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jan Sebechlebsky <jsebechlebsky@google.com> 2023-05-09 14:44:51 +0200
committer Ján Sebechlebský <jsebechlebsky@google.com> 2023-05-10 09:22:01 +0000
commitcc8f06b2bf1deadb19fba94e655bb28e8dac3f2b (patch)
treec7282097053a25e38c8a725391a6edb6f3177d71
parentb1cd493738169af209265175fde145bfc4e03e4f (diff)
Remove BinderDeathRecipient from virtual sensor binder token
Virtual sensor binder token is always owned by system server, so the death recipient is redundant and never actually invoked. Bug: 278900649 Test: atest SensorControllerTest Change-Id: I0052ec8c223bad52ec3d29716266e23cf341a75c
-rw-r--r--services/companion/java/com/android/server/companion/virtual/SensorController.java61
1 files changed, 8 insertions, 53 deletions
diff --git a/services/companion/java/com/android/server/companion/virtual/SensorController.java b/services/companion/java/com/android/server/companion/virtual/SensorController.java
index 2d591b614d18..fb99bff6698b 100644
--- a/services/companion/java/com/android/server/companion/virtual/SensorController.java
+++ b/services/companion/java/com/android/server/companion/virtual/SensorController.java
@@ -36,7 +36,6 @@ import com.android.server.LocalServices;
import com.android.server.sensors.SensorManagerInternal;
import java.io.PrintWriter;
-import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
@@ -73,15 +72,10 @@ public class SensorController {
void close() {
synchronized (mLock) {
- final Iterator<Map.Entry<IBinder, SensorDescriptor>> iterator =
- mSensorDescriptors.entrySet().iterator();
- if (iterator.hasNext()) {
- final Map.Entry<IBinder, SensorDescriptor> entry = iterator.next();
- final IBinder token = entry.getKey();
- final SensorDescriptor sensorDescriptor = entry.getValue();
- iterator.remove();
- closeSensorDescriptorLocked(token, sensorDescriptor);
- }
+ mSensorDescriptors.values().forEach(
+ descriptor -> mSensorManagerInternal.removeRuntimeSensor(
+ descriptor.getHandle()));
+ mSensorDescriptors.clear();
}
}
@@ -110,19 +104,9 @@ public class SensorController {
throw new SensorCreationException("Received an invalid virtual sensor handle.");
}
- // The handle is valid from here, so ensure that all failures clean it up.
- final BinderDeathRecipient binderDeathRecipient;
- try {
- binderDeathRecipient = new BinderDeathRecipient(sensorToken);
- sensorToken.linkToDeath(binderDeathRecipient, /* flags= */ 0);
- } catch (RemoteException e) {
- mSensorManagerInternal.removeRuntimeSensor(handle);
- throw new SensorCreationException("Client died before sensor could be created.", e);
- }
-
synchronized (mLock) {
SensorDescriptor sensorDescriptor = new SensorDescriptor(
- handle, config.getType(), config.getName(), binderDeathRecipient);
+ handle, config.getType(), config.getName());
mSensorDescriptors.put(sensorToken, sensorDescriptor);
}
return handle;
@@ -149,17 +133,10 @@ public class SensorController {
if (sensorDescriptor == null) {
throw new IllegalArgumentException("Could not unregister sensor for given token");
}
- closeSensorDescriptorLocked(token, sensorDescriptor);
+ mSensorManagerInternal.removeRuntimeSensor(sensorDescriptor.getHandle());
}
}
- @GuardedBy("mLock")
- private void closeSensorDescriptorLocked(IBinder token, SensorDescriptor sensorDescriptor) {
- token.unlinkToDeath(sensorDescriptor.getDeathRecipient(), /* flags= */ 0);
- final int handle = sensorDescriptor.getHandle();
- mSensorManagerInternal.removeRuntimeSensor(handle);
- }
-
void dump(@NonNull PrintWriter fout) {
fout.println(" SensorController: ");
@@ -177,7 +154,7 @@ public class SensorController {
void addSensorForTesting(IBinder deviceToken, int handle, int type, String name) {
synchronized (mLock) {
mSensorDescriptors.put(deviceToken,
- new SensorDescriptor(handle, type, name, () -> {}));
+ new SensorDescriptor(handle, type, name));
}
}
@@ -285,13 +262,11 @@ public class SensorController {
static final class SensorDescriptor {
private final int mHandle;
- private final IBinder.DeathRecipient mDeathRecipient;
private final int mType;
private final String mName;
- SensorDescriptor(int handle, int type, String name, IBinder.DeathRecipient deathRecipient) {
+ SensorDescriptor(int handle, int type, String name) {
mHandle = handle;
- mDeathRecipient = deathRecipient;
mType = type;
mName = name;
}
@@ -304,26 +279,6 @@ public class SensorController {
public String getName() {
return mName;
}
- public IBinder.DeathRecipient getDeathRecipient() {
- return mDeathRecipient;
- }
- }
-
- private final class BinderDeathRecipient implements IBinder.DeathRecipient {
- private final IBinder mSensorToken;
-
- BinderDeathRecipient(IBinder sensorToken) {
- mSensorToken = sensorToken;
- }
-
- @Override
- public void binderDied() {
- // All callers are expected to call {@link VirtualDevice#unregisterSensor} before
- // quitting, which removes this death recipient. If this is invoked, the remote end
- // died, or they disposed of the object without properly unregistering.
- Slog.e(TAG, "Virtual sensor controller binder died");
- unregisterSensor(mSensorToken);
- }
}
/** An internal exception that is thrown to indicate an error when opening a virtual sensor. */