summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Brad Fitzpatrick <bradfitz@android.com> 2011-03-28 08:15:35 -0700
committer Android Git Automerger <android-git-automerger@android.com> 2011-03-28 08:15:35 -0700
commit7a84a60d569ef7373fbb6418026b935d48fcd7e7 (patch)
tree45c9ffd1311760dd973b940a0bcb78201024a2f4
parentad91eee2774e18204a14d473242efe5640b91152 (diff)
parent1a5a2379eb3a6cf16fb153aecbc4ac9e85d3ed42 (diff)
am 1a5a2379: Merge "Unregister callback from binder when vibration is removed"
* commit '1a5a2379eb3a6cf16fb153aecbc4ac9e85d3ed42': Unregister callback from binder when vibration is removed
-rwxr-xr-xservices/java/com/android/server/VibratorService.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/services/java/com/android/server/VibratorService.java b/services/java/com/android/server/VibratorService.java
index f0b59555b2b9..86c30f88a23e 100755
--- a/services/java/com/android/server/VibratorService.java
+++ b/services/java/com/android/server/VibratorService.java
@@ -243,6 +243,7 @@ public class VibratorService extends IVibratorService.Stub {
// Lock held on mVibrations
private void startNextVibrationLocked() {
if (mVibrations.size() <= 0) {
+ mCurrentVibration = null;
return;
}
mCurrentVibration = mVibrations.getFirst();
@@ -269,17 +270,27 @@ public class VibratorService extends IVibratorService.Stub {
Vibration vib = iter.next();
if (vib.mToken == token) {
iter.remove();
+ unlinkVibration(vib);
return vib;
}
}
// We might be looking for a simple vibration which is only stored in
// mCurrentVibration.
if (mCurrentVibration != null && mCurrentVibration.mToken == token) {
+ unlinkVibration(mCurrentVibration);
return mCurrentVibration;
}
return null;
}
+ private void unlinkVibration(Vibration vib) {
+ if (vib.mPattern != null) {
+ // If Vibration object has a pattern,
+ // the Vibration object has also been linkedToDeath.
+ vib.mToken.unlinkToDeath(vib, 0);
+ }
+ }
+
private class VibrateThread extends Thread {
final Vibration mVibration;
boolean mDone;
@@ -356,6 +367,7 @@ public class VibratorService extends IVibratorService.Stub {
// If this vibration finished naturally, start the next
// vibration.
mVibrations.remove(mVibration);
+ unlinkVibration(mVibration);
startNextVibrationLocked();
}
}