Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit a556d071 authored by ramindani's avatar ramindani Committed by Ram Indani
Browse files

SF: Fix deadlock while stopping idle timer

scope_lock `mRefreshRateConfigsLock` is acquired
during `Scheduler::setRefreshRateConfigs` to
stop & clear the existing idle timer callback.
And in the meantime, when the code in
`OneShotTimer::loop` encounters the timeout
and then timeoutcallback is requested from
OneShotTimer::loop, this callback in
`Scheduler::kernelIdleTimerCallback`
will try to acquire the lock on
`mRefreshRateConfigsLock`.
The OneShotTimer::stop which is called to reset
the idle timer from the
`Scheduler::setRefreshRateConfigs` now join on
the OneShotTimer::loop thread that is now blocked
waiting on the `mRefreshRateConfigsLock`. So this
call never finishes and deadlock happens.
When we use the fakeGuard to lock `mRefreshRateConfigsLock`
we fake the lock and stop the idle timer. This is okay to do
as we only update mRefreshRateConfig on the main thread.

Test: atest libsurfaceflinger_unittest
go/wm-smoke
BUG: 233423207

Change-Id: I146325193b57d81bc3423426355791ca0ec962f5
parent 900cec50
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment