@@ -2401,6 +2401,9 @@ void GpuImageDecodeCache::DecodeImageIfNecessary(
2401
2401
2402
2402
image_data->decode .ResetData ();
2403
2403
2404
+ // Prevent image_data from being deleted while lock is not held.
2405
+ scoped_refptr<ImageData> image_data_holder (image_data);
2406
+
2404
2407
// Decode the image into `aux_image_data` while the lock is not held.
2405
2408
DecodedAuxImageData aux_image_data[kAuxImageCount ];
2406
2409
{
@@ -2728,6 +2731,9 @@ void GpuImageDecodeCache::UploadImageIfNecessary_GpuCpu_YUVA(
2728
2731
sk_sp<SkImage> uploaded_v_image =
2729
2732
image_data->decode .image (2 , AuxImage::kDefault );
2730
2733
2734
+ // Prevent image_data from being deleted while lock is not held.
2735
+ scoped_refptr<ImageData> image_data_holder (image_data);
2736
+
2731
2737
// For kGpu, we upload and color convert (if necessary).
2732
2738
if (image_data->mode == DecodedDataMode::kGpu ) {
2733
2739
DCHECK (!use_transfer_cache_);
@@ -2815,6 +2821,9 @@ void GpuImageDecodeCache::UploadImageIfNecessary_GpuCpu_RGBA(
2815
2821
DCHECK (!use_transfer_cache_);
2816
2822
DCHECK (!image_data->info .yuva .has_value ());
2817
2823
2824
+ // Prevent image_data from being deleted while lock is not held.
2825
+ scoped_refptr<ImageData> image_data_holder (image_data);
2826
+
2818
2827
// RGBX decoding is below.
2819
2828
// For kGpu, we upload and color convert (if necessary).
2820
2829
if (image_data->mode == DecodedDataMode::kGpu ) {
0 commit comments