From 5d414665ea67dd2a987c4822803aea5e6212c7e2 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Fri, 12 Oct 2018 18:36:40 -0700 Subject: [PATCH] Fix reload for Image views in Android Summary: This diff fixes the release of ImageRequest object. The responseFutureSplitter_ can be destroyed by the time ~ImageRequest is executed. See P60163877 for original crash (this crash was reproducible when reloading or closing a Fabric screen that contains several images. Reviewed By: shergin Differential Revision: D10282207 fbshipit-source-id: 4f0894959e54f6d15b98e216df102e764866e387 --- .../fabric/imagemanager/ImageRequest.h | 2 -- .../platform/android/ImageManager.cpp | 2 +- .../platform/android/ImageRequest.cpp | 35 +++++++++++++++++++ .../{ => platform/ios}/ImageRequest.cpp | 2 -- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 ReactCommon/fabric/imagemanager/platform/android/ImageRequest.cpp rename ReactCommon/fabric/imagemanager/{ => platform/ios}/ImageRequest.cpp (97%) diff --git a/ReactCommon/fabric/imagemanager/ImageRequest.h b/ReactCommon/fabric/imagemanager/ImageRequest.h index 52a1d0141d..1a84a1833d 100644 --- a/ReactCommon/fabric/imagemanager/ImageRequest.h +++ b/ReactCommon/fabric/imagemanager/ImageRequest.h @@ -41,8 +41,6 @@ class ImageRequest final { const ImageSource &imageSource, folly::Future &&responseFuture); - ImageRequest(); - /* * The move constructor. */ diff --git a/ReactCommon/fabric/imagemanager/platform/android/ImageManager.cpp b/ReactCommon/fabric/imagemanager/platform/android/ImageManager.cpp index 6c81c831b6..4221aac1e2 100644 --- a/ReactCommon/fabric/imagemanager/platform/android/ImageManager.cpp +++ b/ReactCommon/fabric/imagemanager/platform/android/ImageManager.cpp @@ -20,7 +20,7 @@ ImageManager::~ImageManager() { ImageRequest ImageManager::requestImage(const ImageSource &imageSource) const { // Not implemented. - return {}; + abort(); } } // namespace react diff --git a/ReactCommon/fabric/imagemanager/platform/android/ImageRequest.cpp b/ReactCommon/fabric/imagemanager/platform/android/ImageRequest.cpp new file mode 100644 index 0000000000..ec88e31702 --- /dev/null +++ b/ReactCommon/fabric/imagemanager/platform/android/ImageRequest.cpp @@ -0,0 +1,35 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include "ImageRequest.h" + +namespace facebook { +namespace react { + +ImageRequest::ImageRequest( + const ImageSource &imageSource, + folly::Future &&responseFuture) { + // Not implemented. +} + +ImageRequest::ImageRequest(ImageRequest &&other) noexcept + : imageSource_(std::move(other.imageSource_)), + responseFutureSplitter_(std::move(other.responseFutureSplitter_)) { + // Not implemented. +} + +ImageRequest::~ImageRequest() { + // Not implemented. +} + +folly::Future ImageRequest::getResponseFuture() const { + // Not implemented. + abort(); +} + +} // namespace react +} // namespace facebook diff --git a/ReactCommon/fabric/imagemanager/ImageRequest.cpp b/ReactCommon/fabric/imagemanager/platform/ios/ImageRequest.cpp similarity index 97% rename from ReactCommon/fabric/imagemanager/ImageRequest.cpp rename to ReactCommon/fabric/imagemanager/platform/ios/ImageRequest.cpp index d2fd32f92c..afa6cb3bd9 100644 --- a/ReactCommon/fabric/imagemanager/ImageRequest.cpp +++ b/ReactCommon/fabric/imagemanager/platform/ios/ImageRequest.cpp @@ -16,8 +16,6 @@ class ImageRequest::ImageNoLongerNeededException : public std::logic_error { : std::logic_error("Image no longer needed.") {} }; -ImageRequest::ImageRequest() {} - ImageRequest::ImageRequest( const ImageSource &imageSource, folly::Future &&responseFuture)