diff options
| author | 2011-03-28 08:15:35 -0700 | |
|---|---|---|
| committer | 2011-03-28 08:15:35 -0700 | |
| commit | 7a84a60d569ef7373fbb6418026b935d48fcd7e7 (patch) | |
| tree | 45c9ffd1311760dd973b940a0bcb78201024a2f4 | |
| parent | ad91eee2774e18204a14d473242efe5640b91152 (diff) | |
| parent | 1a5a2379eb3a6cf16fb153aecbc4ac9e85d3ed42 (diff) | |
am 1a5a2379: Merge "Unregister callback from binder when vibration is removed"
* commit '1a5a2379eb3a6cf16fb153aecbc4ac9e85d3ed42':
Unregister callback from binder when vibration is removed
| -rwxr-xr-x | services/java/com/android/server/VibratorService.java | 12 |
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(); } } |