V1018. Usage of a suspicious mutex wrapper. It is probably unused, uninitialized, or already locked.

The analyzer has detected an incorrect use of a mutex wrapper (std::unique_lock, etc).

Consider the following example:

std::unique_lock<std::mutex> lck;
lck.lock();

Here, in the second line, an exception 'std::system_error' will be thrown since there is no mutex associated with the wrapper. It should either be passed in the constructor:

std::unique_lock<std::mutex> lck(m, std::defer_lock);
lck.lock();

or initialized by the 'swap()' method:

std::unique_lock<std::mutex> lck_global(mtx, std::defer_lock);
....
std::unique_lock<std::mutex> lck;
lck.swap(lck_global);
lck.lock();

This diagnostic also detects cases where a critical section is declared but the mutex is not locked for some reason:

std::unique_lock<std::mutex> lck(m, std::defer_lock);
//lck.lock();

According to Common Weakness Enumeration, potential errors found by using this diagnostic are classified as CWE-413, CWE-833.


Bugs Found

Checked Projects
410
Collected Errors
14 111
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept