summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Peng Xu <pengxu@google.com> 2017-04-27 04:49:11 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-04-27 04:49:16 +0000
commit3ab258c98d1b40bdea2833e9671fae8431d86ec5 (patch)
treecb6963e655bae110376a30644a089238ee00825a
parent0db47f9364556af2a4e3f0e96670260d9c0a5a4a (diff)
parentb5322b2be5e16ee809eabbee4fca8b523a1d8290 (diff)
Merge "[Stability]: fix system_server crash issue caused by fd leak." into oc-dev
-rw-r--r--core/java/android/hardware/SystemSensorManager.java18
1 files changed, 14 insertions, 4 deletions
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 51506b00b892..80cbde75efd2 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -16,12 +16,10 @@
package android.hardware;
-import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.os.MemoryFile;
@@ -51,8 +49,9 @@ import java.util.Map;
*/
public class SystemSensorManager extends SensorManager {
//TODO: disable extra logging before release
- private static boolean DEBUG_DYNAMIC_SENSOR = true;
- private static int MIN_DIRECT_CHANNEL_BUFFER_SIZE = 104;
+ private static final boolean DEBUG_DYNAMIC_SENSOR = true;
+ private static final int MIN_DIRECT_CHANNEL_BUFFER_SIZE = 104;
+ private static final int MAX_LISTENER_COUNT = 128;
private static native void nativeClassInit();
private static native long nativeCreate(String opPackageName);
@@ -157,6 +156,11 @@ public class SystemSensorManager extends SensorManager {
Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative");
return false;
}
+ if (mSensorListeners.size() >= MAX_LISTENER_COUNT) {
+ throw new IllegalStateException("register failed, " +
+ "the sensor listeners size has exceeded the maximum limit " +
+ MAX_LISTENER_COUNT);
+ }
// Invariants to preserve:
// - one Looper per SensorEventListener
@@ -216,6 +220,12 @@ public class SystemSensorManager extends SensorManager {
if (sensor.getReportingMode() != Sensor.REPORTING_MODE_ONE_SHOT) return false;
+ if (mTriggerListeners.size() >= MAX_LISTENER_COUNT) {
+ throw new IllegalStateException("request failed, " +
+ "the trigger listeners size has exceeded the maximum limit " +
+ MAX_LISTENER_COUNT);
+ }
+
synchronized (mTriggerListeners) {
TriggerEventQueue queue = mTriggerListeners.get(listener);
if (queue == null) {