Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The std::condition_variable::wait() function has an overloaded form that accepts a function object representing the predicate. This form of wait() behaves as if it were implemented as while (!pred()) wait(lock);. This compliant solution uses a lambda as a predicate and passes it to the wait() function. The predicate is expected to return true when it is safe to proceed, which reverses the predicate logic from the compliant solution using an explicit loop predicate.

...

Failure to enclose calls to the wait(), wait_for(), or wait_until() member functions inside a while loop can lead to indefinite blocking and denial of service (DoS).

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

CON54-CPP

Low

Unlikely

Medium

P2

L3

Automated Detection

Tool

Version

Checker

Description

CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.STRUCT.ICOL
CONCURRENCY.BADFUNC.CNDWAIT

Inappropriate Call Outside Loop
Use of Condition Variable Wait

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C++5019
Klocwork
Include Page
Klocwork_V
Klocwork_V
CERT.CONC.WAKE_IN_LOOP
Parasoft C/C++test

Include Page
Parasoft_V
Parasoft_V

CERT_CPP-CON54-a

Wrap functions that can spuriously wake up in a loop

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C++: CON54-CPPChecks for situations where functions that can spuriously wake up are not wrapped in loop

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website

Related Guidelines

Bibliography

[ISO/IEC 9899:2011]7.17.7.4, "The atomic_compare_exchange Generic Functions"

[Lea 2000]

1.3.2, "Liveness"
3.2.2, "Monitor Mechanics"

...


...

Image Modified Image Modified Image Modified