Skip to content

Commit

Permalink
[woe] Use weak_ptr to fix dangling pointer issue on view destroy
Browse files Browse the repository at this point in the history
Surface control might get ack callback after renderer has already
been destroyed and thus causing crash on exit
  • Loading branch information
zhani committed Mar 10, 2024
1 parent e2b89f2 commit 3f8a669
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions wpe/src/main/cpp/Browser/RendererSurfaceControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,19 @@ void RendererSurfaceControl::commitBuffer(
resourceRef.m_surface = m_surface;
resourceRef.m_scopedBuffer = buffer;

auto onCompleteCallback = [this, resources = std::move(resourcesToRelease)](auto&& stats) {
onTransActionAckOnBrowserThread(resources, std::forward<decltype(stats)>(stats));
std::weak_ptr<RendererSurfaceControl> const weakPtr(shared_from_this());
auto onCompleteCallback = [weakPtr, resources = std::move(resourcesToRelease)](auto&& stats) {
auto ptr = weakPtr.lock();
if (ptr)
ptr->onTransActionAckOnBrowserThread(resources, std::forward<decltype(stats)>(stats));
};
transaction.setOnCompleteCallback(std::move(onCompleteCallback));

auto onCommitCallback = [this] { onTransactionCommittedOnBrowserThread(); };
auto onCommitCallback = [weakPtr]() {
auto ptr = weakPtr.lock();
if (ptr)
ptr->onTransactionCommittedOnBrowserThread();
};
transaction.setOnCommitCallback(std::move(onCommitCallback));

if (m_numTransactionCommitOrAckPending > 0) {
Expand Down

0 comments on commit 3f8a669

Please sign in to comment.