fix this pointer release

Signed-off-by: lvmengyu <lvmengyu3@huawei.com>
Change-Id: I283c635e6ea78fafa1ce02b3afc641794fd4f2e5
This commit is contained in:
lvmengyu 2024-04-16 17:23:22 +08:00
parent 9c868e691e
commit 4a1aa64559

View File

@ -250,11 +250,13 @@ void RSCanvasDrawingRenderNodeDrawable::ProcessCPURenderInBackgroundThread(std::
std::shared_ptr<RSContext> ctx, NodeId nodeId)
{
auto surface = surface_;
RSBackgroundThread::Instance().PostTask([this, cmds, surface, ctx, nodeId]() {
if (!cmds || cmds->IsEmpty() || !surface || !ctx) {
auto drawable = RSRenderNodeDrawableAdapter::GetDrawableById(nodeId);
RSBackgroundThread::Instance().PostTask([drawable, cmds, surface, ctx, nodeId]() {
if (!cmds || cmds->IsEmpty() || !surface || !ctx || !drawable) {
return;
}
if (surface != this->surface_) {
auto canvasDrawingDrawable = static_cast<DrawableV2::RSCanvasDrawingRenderNodeDrawable*>(drawable.get());
if (surface != canvasDrawingDrawable->surface_) {
return;
}
cmds->Playback(*surface->GetCanvas());
@ -262,9 +264,9 @@ void RSCanvasDrawingRenderNodeDrawable::ProcessCPURenderInBackgroundThread(std::
if (image) {
SKResourceManager::Instance().HoldResource(image);
}
std::lock_guard<std::mutex> lock(this->imageMutex_);
this->image_ = image;
auto task = [ctx, nodeId = renderNode_->GetId()] () {
std::lock_guard<std::mutex> lock(canvasDrawingDrawable->imageMutex_);
canvasDrawingDrawable->image_ = image;
auto task = [ctx, nodeId] () {
if (UNLIKELY(!ctx)) {
return;
}