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.
pull/10104/head
Kevin Bracey 2019-05-29 15:33:15 +03:00
parent 77321ca79e
commit ccf59f8e81
1 changed files with 5 additions and 9 deletions

View File

@ -60,9 +60,6 @@ SysTimer<US_IN_TICK, IRQ>::SysTimer() :
_ticking(false),
_deep_sleep_locked(false)
{
if (!_ticker_data->interface->runs_in_deep_sleep) {
sleep_manager_lock_deep_sleep();
}
}
template<uint32_t US_IN_TICK, bool IRQ>
@ -76,9 +73,6 @@ SysTimer<US_IN_TICK, IRQ>::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<uint32_t US_IN_TICK, bool IRQ>
@ -86,9 +80,6 @@ SysTimer<US_IN_TICK, IRQ>::~SysTimer()
{
cancel_tick();
cancel_wake();
if (!_ticker_data->interface->runs_in_deep_sleep) {
sleep_manager_unlock_deep_sleep();
}
}
template<uint32_t US_IN_TICK, bool IRQ>
@ -117,6 +108,11 @@ void SysTimer<US_IN_TICK, IRQ>::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 &&