• Alexander Alekhin's avatar
    core(ocl): fix deadlock in UMatDataAutoLock · cec70052
    Alexander Alekhin authored
    UMatData locks are not mapped on real locks (they are mapped to some "pre-initialized" pool).
    
    Concurrent execution of these statements may lead to deadlock:
    - a.copyTo(b) from thread 1
    - c.copyTo(d) from thread 2
    where:
    - 'a' and 'd' are mapped to single lock "A".
    - 'b' and 'c' are mapped to single lock "B".
    
    Workaround is to process locks with strict order.
    cec70052
umatrix.hpp 520 Bytes
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#ifndef OPENCV_CORE_SRC_UMATRIX_HPP
#define OPENCV_CORE_SRC_UMATRIX_HPP

namespace cv {

struct CV_EXPORTS UMatDataAutoLock
{
    explicit UMatDataAutoLock(UMatData* u);
    UMatDataAutoLock(UMatData* u1, UMatData* u2);
    ~UMatDataAutoLock();
    UMatData* u1;
    UMatData* u2;
};

}

#endif // OPENCV_CORE_SRC_UMATRIX_HPP