C and C++


CONCURRENCY.C_THREAD.ISD : Inappropriate Storage Duration

Summary

A variable of one of the following types is declared as a local or thread local.

Properties

Class Name Inappropriate Storage Duration
Significance reliability
Mnemonic CONCURRENCY.C_THREAD.ISD
Categories
MisraC2023 MisraC2023:22.13 Thread objects, thread synchronization objects and thread-specific storage pointers shall have appropriate storage duration
Misra2012 Misra2012:22.13 Thread objects, thread synchronization objects and thread-specific storage pointers shall have appropriate storage duration
CWE CWE:662 Improper Synchronization
CERT-C CERT-C:CON34-C Declare objects shared between threads with appropriate storage durations
Availability Available for C only (not C++).
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Inappropriate Storage Duration"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <threads.h>

_Thread_local mtx_t m_tl; /* 'Inappropriate Storage Duration' warning issued here */

_Thread_local int i_tl;            /* ok: type is not thrd_t, mtx_t, cnd_t, or tss_t */

static mtx_t m_static;             /* ok: duration is not thread or automatic */

void c_thread_isd(void){
    mtx_t m_l;            /* 'Inappropriate Storage Duration warning' issued here */
    static mtx_t m_sl;             /* ok: duration is not thread or automatic */

    /* ... */
}

Relevant Configuration File Parameters

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