From 7f3eea6325205b33ab60f6ce9edbd0442a852b41 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 25 Jul 2017 12:26:53 +0300 Subject: [PATCH] core: fix Mat/UMat cleanup on exceptions in deallocate() --- modules/core/src/matrix.cpp | 8 +++++--- modules/core/src/umatrix.cpp | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 0e18ad20e0..bc851704a7 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -60,7 +60,6 @@ void MatAllocator::unmap(UMatData* u) const if(u->urefcount == 0 && u->refcount == 0) { deallocate(u); - u = NULL; } } @@ -461,8 +460,11 @@ void Mat::copySize(const Mat& m) void Mat::deallocate() { if(u) - (u->currAllocator ? u->currAllocator : allocator ? allocator : getDefaultAllocator())->unmap(u); - u = NULL; + { + UMatData* u_ = u; + u = NULL; + (u_->currAllocator ? u_->currAllocator : allocator ? allocator : getDefaultAllocator())->unmap(u_); + } } Mat::Mat(const Mat& m, const Range& _rowRange, const Range& _colRange) diff --git a/modules/core/src/umatrix.cpp b/modules/core/src/umatrix.cpp index 239e461cd9..58f7390321 100644 --- a/modules/core/src/umatrix.cpp +++ b/modules/core/src/umatrix.cpp @@ -411,8 +411,9 @@ UMat::~UMat() void UMat::deallocate() { - u->currAllocator->deallocate(u); + UMatData* u_ = u; u = NULL; + u_->currAllocator->deallocate(u_); }