From f11f8f10cd467cc0f366b44f933b3df56daa9f0f Mon Sep 17 00:00:00 2001 From: Swift Kim Date: Tue, 27 Sep 2022 10:29:10 +0900 Subject: [PATCH] Fix FlutterEngineOnVsync being called after engine shutdown (#355) --- shell/platform/tizen/tizen_vsync_waiter.cc | 19 ++++++++++--------- shell/platform/tizen/tizen_vsync_waiter.h | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/shell/platform/tizen/tizen_vsync_waiter.cc b/shell/platform/tizen/tizen_vsync_waiter.cc index 0906cae1e9fe9..e321759614d02 100644 --- a/shell/platform/tizen/tizen_vsync_waiter.cc +++ b/shell/platform/tizen/tizen_vsync_waiter.cc @@ -32,7 +32,7 @@ TizenVsyncWaiter::TizenVsyncWaiter(FlutterTizenEngine* engine) { } TizenVsyncWaiter::~TizenVsyncWaiter() { - tdm_client_.reset(); + tdm_client_->OnEngineStop(); SendMessage(kMessageQuit, 0); @@ -130,10 +130,6 @@ TdmClient::TdmClient(FlutterTizenEngine* engine) { } TdmClient::~TdmClient() { - { - std::lock_guard lock(engine_mutex_); - engine_ = nullptr; - } if (vblank_) { tdm_client_vblank_destroy(vblank_); vblank_ = nullptr; @@ -145,6 +141,15 @@ TdmClient::~TdmClient() { } } +bool TdmClient::IsValid() { + return vblank_ && client_; +} + +void TdmClient::OnEngineStop() { + std::lock_guard lock(engine_mutex_); + engine_ = nullptr; +} + void TdmClient::AwaitVblank(intptr_t baton) { baton_ = baton; tdm_error ret = tdm_client_vblank_wait(vblank_, 1, VblankCallback, this); @@ -155,10 +160,6 @@ void TdmClient::AwaitVblank(intptr_t baton) { tdm_client_handle_events(client_); } -bool TdmClient::IsValid() { - return vblank_ && client_; -} - void TdmClient::VblankCallback(tdm_client_vblank* vblank, tdm_error error, unsigned int sequence, diff --git a/shell/platform/tizen/tizen_vsync_waiter.h b/shell/platform/tizen/tizen_vsync_waiter.h index acb164b049019..627fc6f02051b 100644 --- a/shell/platform/tizen/tizen_vsync_waiter.h +++ b/shell/platform/tizen/tizen_vsync_waiter.h @@ -23,6 +23,7 @@ class TdmClient { virtual ~TdmClient(); bool IsValid(); + void OnEngineStop(); void AwaitVblank(intptr_t baton); private: