fix memory leak for Mat::getUMat() operation
authorAlexander Alekhin <alexander.alekhin@itseez.com>
Tue, 4 Feb 2014 13:23:26 +0000 (17:23 +0400)
committerAlexander Alekhin <alexander.alekhin@itseez.com>
Tue, 4 Feb 2014 13:25:09 +0000 (17:25 +0400)
modules/core/include/opencv2/core/mat.inl.hpp
modules/core/src/matrix.cpp

index fd7b061..e0f13a5 100644 (file)
@@ -3112,8 +3112,7 @@ UMat::UMat(const UMat& m)
 : flags(m.flags), dims(m.dims), rows(m.rows), cols(m.cols), allocator(m.allocator),
 u(m.u), offset(m.offset), size(&rows)
 {
-    if( u )
-        CV_XADD(&(u->urefcount), 1);
+    addref();
     if( m.dims <= 2 )
     {
         step[0] = m.step[0]; step[1] = m.step[1];
@@ -3148,8 +3147,7 @@ UMat& UMat::operator = (const UMat& m)
 {
     if( this != &m )
     {
-        if( m.u )
-            CV_XADD(&(m.u->urefcount), 1);
+        const_cast<UMat&>(m).addref();
         release();
         flags = m.flags;
         if( dims <= 2 && m.dims <= 2 )
index 87e4fd5..c84724d 100644 (file)
@@ -191,7 +191,6 @@ public:
     bool allocate(UMatData* u, int /*accessFlags*/) const
     {
         if(!u) return false;
-        CV_XADD(&u->urefcount, 1);
         return true;
     }