The analyzer has detected a function body that contains a block of code starting and ending with calls to functions with opposite names, while the code between these calls contains a condition causing the function under analysis to return without calling the epilogue function.
Consider the following example:
int pthread_cond_destroy(pthread_cond_t * cond) { EnterCriticalSection(&ptw32_cond_list_lock); /* ... */ if (sem_wait (&(cv->semBlockLock)) != 0) { return errno; // <= V1020 Warning } /* ... */ LeaveCriticalSection(&ptw32_cond_list_lock); return 0; }
There are the calls to 'EnterCriticalSection' and 'LeaveCriticalSection' with the opposite words 'Enter' and 'Leave' at the beginning and end of the function body. The code in between contains a return statement with a missing call to 'LeaveCriticalSection' before it. This is what the fixed code should look like:
int pthread_cond_destroy(pthread_cond_t * cond) { EnterCriticalSection(&ptw32_cond_list_lock); /* ... */ if (sem_wait (&(cv->semBlockLock)) != 0) { LeaveCriticalSection(&ptw32_cond_list_lock); return errno; } /* ... */ LeaveCriticalSection(&ptw32_cond_list_lock); return 0; }
This diagnostic is classified as:
You can look at examples of errors detected by the V1020 diagnostic. |