Skip to content

Commit 3883e0e

Browse files
committed
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.
1 parent 33f28ec commit 3883e0e

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

platform/SysTimer.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ SysTimer<US_IN_TICK, IRQ>::SysTimer() :
6060
_ticking(false),
6161
_deep_sleep_locked(false)
6262
{
63-
if (!_ticker_data->interface->runs_in_deep_sleep) {
64-
sleep_manager_lock_deep_sleep();
65-
}
6663
}
6764

6865
template<uint32_t US_IN_TICK, bool IRQ>
@@ -76,19 +73,13 @@ SysTimer<US_IN_TICK, IRQ>::SysTimer(const ticker_data_t *data) :
7673
_ticking(false),
7774
_deep_sleep_locked(false)
7875
{
79-
if (!_ticker_data->interface->runs_in_deep_sleep) {
80-
sleep_manager_lock_deep_sleep();
81-
}
8276
}
8377

8478
template<uint32_t US_IN_TICK, bool IRQ>
8579
SysTimer<US_IN_TICK, IRQ>::~SysTimer()
8680
{
8781
cancel_tick();
8882
cancel_wake();
89-
if (!_ticker_data->interface->runs_in_deep_sleep) {
90-
sleep_manager_unlock_deep_sleep();
91-
}
9283
}
9384

9485
template<uint32_t US_IN_TICK, bool IRQ>
@@ -117,6 +108,11 @@ void SysTimer<US_IN_TICK, IRQ>::set_wake_time(uint64_t at)
117108
_wake_time_set = true;
118109
_wake_time_passed = false;
119110

111+
if (!_deep_sleep_locked && !_ticker_data->interface->runs_in_deep_sleep) {
112+
_deep_sleep_locked = true;
113+
sleep_manager_lock_deep_sleep();
114+
}
115+
120116
/* If deep sleep is unlocked, and we have enough time, let's go for it */
121117
if (MBED_CONF_TARGET_DEEP_SLEEP_LATENCY > 0 &&
122118
ticks_to_sleep > MBED_CONF_TARGET_DEEP_SLEEP_LATENCY &&

0 commit comments

Comments
 (0)