!10077 修复this指针可能已被销毁问题

Merge pull request !10077 from lmy/parallel
This commit is contained in:
openharmony_ci 2024-04-18 08:45:06 +00:00 committed by Gitee
commit 2a16200be4
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F

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;
}