diff options
author | 2019-01-10 14:37:17 -0800 | |
---|---|---|
committer | 2019-01-10 15:34:49 -0800 | |
commit | 6104cea3fb0bddd766f390f9f4e2db9fc00b410e (patch) | |
tree | 3493ab6e3dc09dd9ffd027bc1fa85cc84abb2635 /libs/hwui/HardwareBitmapUploader.cpp | |
parent | 8b9351ba04eef507d4ff97a84d0c13df60507daf (diff) |
Fix leak/crash in exit
Bug: 120440607
Test: hwuimacro32 doesn't crash
Change-Id: I35b7a924e338efb314f07b923ba22ffcf98f75ee
Diffstat (limited to 'libs/hwui/HardwareBitmapUploader.cpp')
-rw-r--r-- | libs/hwui/HardwareBitmapUploader.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libs/hwui/HardwareBitmapUploader.cpp b/libs/hwui/HardwareBitmapUploader.cpp index b9860ada18fc..635d0ec66673 100644 --- a/libs/hwui/HardwareBitmapUploader.cpp +++ b/libs/hwui/HardwareBitmapUploader.cpp @@ -34,7 +34,7 @@ namespace android::uirenderer { static std::mutex sLock{}; -static ThreadBase* sUploadThread = nullptr; +static sp<ThreadBase> sUploadThread = nullptr; static renderthread::EglManager sEglManager; static int sPendingUploads = 0; static nsecs_t sLastUpload = 0; @@ -257,4 +257,15 @@ sk_sp<Bitmap> HardwareBitmapUploader::allocateHardwareBitmap(const SkBitmap& sou Bitmap::computePalette(bitmap)); } +void HardwareBitmapUploader::terminate() { + std::lock_guard _lock{sLock}; + LOG_ALWAYS_FATAL_IF(sPendingUploads, "terminate called while uploads in progress"); + if (sUploadThread) { + sUploadThread->requestExit(); + sUploadThread->join(); + sUploadThread = nullptr; + } + sEglManager.destroy(); +} + } // namespace android::uirenderer |