From 88e66697a77f35771e5cba6f1d709b0f7f6d8cb6 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 9 Jul 2015 13:26:59 +0300 Subject: [PATCH] t-api: try to fix allocator fallback code paths issue: http://code.opencv.org/issues/4461 --- modules/core/src/umatrix.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/core/src/umatrix.cpp b/modules/core/src/umatrix.cpp index 48aa86635d..45de93f09b 100644 --- a/modules/core/src/umatrix.cpp +++ b/modules/core/src/umatrix.cpp @@ -230,7 +230,20 @@ UMat Mat::getUMat(int accessFlags, UMatUsageFlags usageFlags) const temp_u = a->allocate(dims, size.p, type(), data, step.p, accessFlags, usageFlags); temp_u->refcount = 1; } - UMat::getStdAllocator()->allocate(temp_u, accessFlags, usageFlags); // TODO result is not checked + bool allocated = false; + try + { + allocated = UMat::getStdAllocator()->allocate(temp_u, accessFlags, usageFlags); + } + catch (const cv::Exception& e) + { + fprintf(stderr, "Exception: %s\n", e.what()); + } + if (!allocated) + { + allocated = getStdAllocator()->allocate(temp_u, accessFlags, usageFlags); + CV_Assert(allocated); + } hdr.flags = flags; setSize(hdr, dims, size.p, step.p); finalizeHdr(hdr); @@ -269,8 +282,11 @@ void UMat::create(int d, const int* _sizes, int _type, UMatUsageFlags _usageFlag if( total() > 0 ) { MatAllocator *a = allocator, *a0 = getStdAllocator(); - if(!a) + if (!a) + { a = a0; + a0 = Mat::getStdAllocator(); + } try { u = a->allocate(dims, size, _type, 0, step.p, 0, usageFlags);