C and C++


CONCURRENCY.LOCK.MISMATCH : Lock/Unlock Mismatch

Summary

Locks are released out of order. The preferred order of release is the opposite of the order in which the locks were acquired: newer locks should be released before older ones.

Releasing locks out of order can lead to priority inversion on some systems.

Properties

Class Name Lock/Unlock Mismatch
Significance style
Mnemonic CONCURRENCY.LOCK.MISMATCH
Categories
CWE CWE:662 Improper Synchronization
  CWE:710 Improper Adherence to Coding Standards
JPL JPL:9 Place restrictions on the use of semaphores and locks.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Lock/Unlock Mismatch"

Triggering Functions

Lock/Unlock Mismatch warnings can be triggered by the following functions.

Example

#include <pthread.h>

pthread_mutex_t L1;
pthread_mutex_t L2;

void mismatched_locks(){
    pthread_mutex_lock(&L1);
    pthread_mutex_lock(&L2);
    /* ... operate on locked data */
    pthread_mutex_unlock(&L1); /* 'Lock/Unlock Mismatch' warning issued here */
    pthread_mutex_unlock(&L2); /* 'Lock/Unlock Mismatch' warning issued here */
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.