Fix race condition in WakeLocks.

A previous fix to PowerManager.WakeLock introduced a new bug. When
a reference counted wakelock (such as SMSDispatcher) is acquired
multiple times in quick succession with a timeout, the first timeout
would remove the second callback from the handler, decrement the
reference count, but then the wakelock never gets released because
the second callback has been removed.

Bug: 4535237
Change-Id: I4f1240189bf3ed3396c86200c687282597b107d6
This commit is contained in:
Jake Hamby
2011-06-15 19:17:08 -07:00
parent 0a4d51d581
commit b5962e73e8

View File

@@ -313,8 +313,8 @@ public class PowerManager
*/
public void release(int flags) {
synchronized (mToken) {
mHandler.removeCallbacks(mReleaser);
if (!mRefCounted || --mCount == 0) {
mHandler.removeCallbacks(mReleaser);
try {
mService.releaseWakeLock(mToken, flags);
} catch (RemoteException e) {