From ccf59f8e814655fddfeeae1c8990489c1c971e98 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Wed, 29 May 2019 15:33:15 +0300 Subject: [PATCH] SysTimer: don't always hold deep sleep lock Revert back to older behaviour where we hold deep sleep lock only while timing a sleep. Previous version was a speed optimisation, but broke some tests. --- platform/SysTimer.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/platform/SysTimer.cpp b/platform/SysTimer.cpp index 63d1098f04..a79a4b8bd6 100644 --- a/platform/SysTimer.cpp +++ b/platform/SysTimer.cpp @@ -60,9 +60,6 @@ SysTimer::SysTimer() : _ticking(false), _deep_sleep_locked(false) { - if (!_ticker_data->interface->runs_in_deep_sleep) { - sleep_manager_lock_deep_sleep(); - } } template @@ -76,9 +73,6 @@ SysTimer::SysTimer(const ticker_data_t *data) : _ticking(false), _deep_sleep_locked(false) { - if (!_ticker_data->interface->runs_in_deep_sleep) { - sleep_manager_lock_deep_sleep(); - } } template @@ -86,9 +80,6 @@ SysTimer::~SysTimer() { cancel_tick(); cancel_wake(); - if (!_ticker_data->interface->runs_in_deep_sleep) { - sleep_manager_unlock_deep_sleep(); - } } template @@ -117,6 +108,11 @@ void SysTimer::set_wake_time(uint64_t at) _wake_time_set = true; _wake_time_passed = false; + if (!_deep_sleep_locked && !_ticker_data->interface->runs_in_deep_sleep) { + _deep_sleep_locked = true; + sleep_manager_lock_deep_sleep(); + } + /* If deep sleep is unlocked, and we have enough time, let's go for it */ if (MBED_CONF_TARGET_DEEP_SLEEP_LATENCY > 0 && ticks_to_sleep > MBED_CONF_TARGET_DEEP_SLEEP_LATENCY &&