std::lock_guard<std::recursive_mutex> lock(anr_monitor.GetRecMutex());
GSource* source = static_cast<GSource*>(user_data);
GSource* idle_source = anr_monitor.GetIdleSource();
- if (source != idle_source) {
- if (!g_source_is_destroyed(source))
- g_source_destroy(source);
+ if (source == idle_source) anr_monitor.SetIdleSource(nullptr);
- return G_SOURCE_CONTINUE;
- }
-
- anr_monitor.SetIdleSource(nullptr);
return G_SOURCE_REMOVE;
}
gboolean AnrMonitor::TimeoutCb(gpointer user_data) {
- auto* self = static_cast<AnrMonitor*>(user_data);
- std::lock_guard<std::recursive_mutex> lock(self->GetRecMutex());
- auto* idle_source = self->GetIdleSource();
+ std::lock_guard<std::recursive_mutex> lock(anr_monitor.GetRecMutex());
+ auto* idle_source = anr_monitor.GetIdleSource();
if (idle_source != nullptr) {
_E("[ANR] The main thread is unable to enter idle state.");
_E("[ANR] Please modify the implementation so that the main loop does not "
"create a block state.");
- if (!g_source_is_destroyed(idle_source))
- g_source_destroy(idle_source);
-
- anr_monitor.SetIdleSource(nullptr);
}
anr_monitor.AddIdlerToDefaultContext();