# V1020. Function exited without performing epilogue actions. It is possible that there is an error.

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:

CWE-772

You can look at examples of errors detected by the V1020 diagnostic.