Make sure wakelock is held before releaseing it

Bug: 27748109
Change-Id: I38c8ec640f5def7c53348d2dd96a0a2492ff00cc
diff --git a/src/com/android/bluetooth/btservice/AdapterService.java b/src/com/android/bluetooth/btservice/AdapterService.java
index f1c8f01..a4d76b7 100644
--- a/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/src/com/android/bluetooth/btservice/AdapterService.java
@@ -547,7 +547,8 @@
         // {@link #releaseWakeLock(String lockName)}, so a synchronization is needed here.
         synchronized (this) {
             if (mWakeLock != null) {
-                mWakeLock.release();
+                if (mWakeLock.isHeld())
+                    mWakeLock.release();
                 mWakeLock = null;
             }
         }
@@ -2020,14 +2021,15 @@
     // extended to allow acquiring an arbitrary number of wake locks. The current interface
     // takes |lockName| as a parameter in anticipation of that implementation.
     private boolean acquireWakeLock(String lockName) {
-        if (mWakeLock == null) {
-            mWakeLockName = lockName;
-            mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, lockName);
+        synchronized (this) {
+            if (mWakeLock == null) {
+                mWakeLockName = lockName;
+                mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, lockName);
+            }
+
+            if (!mWakeLock.isHeld())
+                mWakeLock.acquire();
         }
-
-        if (!mWakeLock.isHeld())
-            mWakeLock.acquire();
-
         return true;
     }
 
@@ -2042,7 +2044,8 @@
                 return false;
             }
 
-            mWakeLock.release();
+            if (mWakeLock.isHeld())
+                mWakeLock.release();
         }
         return true;
     }