diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index 02436aa806..6a381c15a0 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -176,27 +176,23 @@ public: } }; -namespace +static +MatAllocator*& getDefaultAllocatorMatRef() { - MatAllocator* volatile g_matAllocator = NULL; + static MatAllocator* g_matAllocator = Mat::getStdAllocator(); + return g_matAllocator; } MatAllocator* Mat::getDefaultAllocator() { - if (g_matAllocator == NULL) - { - cv::AutoLock lock(cv::getInitializationMutex()); - if (g_matAllocator == NULL) - { - g_matAllocator = getStdAllocator(); - } - } - return g_matAllocator; + return getDefaultAllocatorMatRef(); } + void Mat::setDefaultAllocator(MatAllocator* allocator) { - g_matAllocator = allocator; + getDefaultAllocatorMatRef() = allocator; } + MatAllocator* Mat::getStdAllocator() { CV_SINGLETON_LAZY_INIT(MatAllocator, new StdMatAllocator())