Non-Compliant Coding Example

#include <signal.h>

size_t i;

void handler(void) {
   i = 0;
}

int main(void) {
   signal(SIGINT, handler);

   i = 1;

   while(i) {
      /* do something */
   }
}

Compliant Solution

Risk Assessment

In addition to incorrect optimizations, this can cause race conditions, resulting in inconsistent state.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

SIGxx-C

2 (medium)

2 (probable)

3 (low)

P12

L2

References

\[[ISO/IEC 03|AA. C References#ISO/IEC 03]\] "Signals and Interrupts"
\[[Open Group 04|AA. C References#Open Group 04]\] [longjmp|http://www.opengroup.org/onlinepubs/000095399/functions/longjmp.html]
\[OpenBSD\] [{{signal()}} Man Page|http://www.openbsd.org/cgi-bin/man.cgi?query=signal]