diff --git a/modules/core/src/matrix.cpp b/modules/core/src/matrix.cpp index b273c8a7d8..5de7e034fd 100644 --- a/modules/core/src/matrix.cpp +++ b/modules/core/src/matrix.cpp @@ -222,10 +222,14 @@ public: } }; +static StdMatAllocator *mat_allocator = NULL; MatAllocator* Mat::getStdAllocator() { - static StdMatAllocator allocator; - return &allocator; + if (mat_allocator == NULL) + { + mat_allocator = new StdMatAllocator(); + } + return mat_allocator; } void swap( Mat& a, Mat& b ) diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 4ee770c679..9d25eb0732 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -5237,10 +5237,15 @@ public: MatAllocator* matStdAllocator; }; +// This line should not force OpenCL runtime initialization! (don't put "new OpenCLAllocator()" here) +static MatAllocator *ocl_allocator = NULL; MatAllocator* getOpenCLAllocator() { - static MatAllocator * allocator = new OpenCLAllocator(); - return allocator; + if (ocl_allocator == NULL) + { + ocl_allocator = new OpenCLAllocator(); + } + return ocl_allocator; } }} // namespace cv::ocl