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

Анализатор обнаружил в теле функции путь выполнения, начинающийся и заканчивающийся вызовом функций, имена которых содержат слова\-антагонисты\. При этом, между вызовами есть условие, которое приводит к возврату из анализируемой функции без вызова функции\-эпилога\.

Рассмотрим пример:

```cpp
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;
}
```

В данном случае, в начале и конце функции присутствуют вызовы 'EnterCriticalSection' и 'LeaveCriticalSection' с соответствующими словами \- антагонистами 'Enter' и 'Leave'\.  Между вызовами есть возврат из функции, перед которым по ошибке пропущен вызов 'LeaveCriticalSection'\. Корректный код будет выглядеть следующим образом:

```cpp
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;
}
```