Prevent Java call for acquiring already held wakelock
Change-Id: Icf455b6aa7c0c1bf7abf7ea9700cfde17f6c7c2b
diff --git a/gki/ulinux/gki_ulinux.c b/gki/ulinux/gki_ulinux.c
index 73a7b51..f9151a3 100644
--- a/gki/ulinux/gki_ulinux.c
+++ b/gki/ulinux/gki_ulinux.c
@@ -211,13 +211,16 @@
if (ticks_in_millis <= TIMER_INTERVAL_FOR_WAKELOCK_IN_MS)
{
// The next deadline is close, just take a wakelock and set a regular (non-wake) timer.
- int rc = bt_os_callouts->acquire_wake_lock(WAKE_LOCK_ID);
- if (rc != BT_STATUS_SUCCESS)
+ if (!alarm_service.wakelock)
{
- ALOGE("%s unable to acquire wake lock: %d", __func__, rc);
- return;
+ int rc = bt_os_callouts->acquire_wake_lock(WAKE_LOCK_ID);
+ if (rc != BT_STATUS_SUCCESS)
+ {
+ ALOGE("%s unable to acquire wake lock: %d", __func__, rc);
+ return;
+ }
+ alarm_service.wakelock = true;
}
- alarm_service.wakelock = true;
ALOGV("%s acquired wake lock, setting short alarm (%lldms).", __func__, ticks_in_millis);
if (!set_nonwake_alarm(ticks_in_millis))
@@ -234,8 +237,12 @@
} else {
ALOGV("%s set long alarm (%lldms), releasing wake lock.", __func__, ticks_in_millis);
}
- alarm_service.wakelock = false;
- bt_os_callouts->release_wake_lock(WAKE_LOCK_ID);
+
+ if (alarm_service.wakelock)
+ {
+ alarm_service.wakelock = false;
+ bt_os_callouts->release_wake_lock(WAKE_LOCK_ID);
+ }
}
}