crypto/async/async.c:216: error: MEMORY_LEAK
  memory dynamically allocated by call to `async_ctx_new()` at line 216, column 36 is not reachable after line 216, column 36.
Showing all 22 steps of the trace


crypto/async/async.c:213:1: start of procedure ASYNC_start_job()
211.   }
212.   
213. > int ASYNC_start_job(ASYNC_JOB **job, int *ret, int (*func)(void *),
214.                            void *args, size_t size)
215.   {

crypto/async/async.c:216:9: Taking true branch
214.                            void *args, size_t size)
215.   {
216.       if (async_get_ctx() == NULL && async_ctx_new() == NULL) {
               ^
217.           return ASYNC_ERR;
218.       }

crypto/async/async.c:216:36: 
214.                            void *args, size_t size)
215.   {
216. >     if (async_get_ctx() == NULL && async_ctx_new() == NULL) {
217.           return ASYNC_ERR;
218.       }

crypto/async/async.c:74:1: start of procedure async_ctx_new()
  72.   static void async_free_pool_internal(async_pool *pool);
  73.   
  74. > static async_ctx *async_ctx_new(void)
  75.   {
  76.       async_ctx *nctx = NULL;

crypto/async/async.c:76:5: 
  74.   static async_ctx *async_ctx_new(void)
  75.   {
  76. >     async_ctx *nctx = NULL;
  77.   
  78.       nctx = OPENSSL_malloc(sizeof (async_ctx));

crypto/async/async.c:78:5: 
  76.       async_ctx *nctx = NULL;
  77.   
  78. >     nctx = OPENSSL_malloc(sizeof (async_ctx));
  79.       if (nctx == NULL) {
  80.           ASYNCerr(ASYNC_F_ASYNC_CTX_NEW, ERR_R_MALLOC_FAILURE);

crypto/mem.c:119:1: start of procedure CRYPTO_malloc()
    117.   }
    118.   
    119. > void *CRYPTO_malloc(size_t num, const char *file, int line)
    120.   {
    121.       void *ret = NULL;

crypto/mem.c:121:5: 
    119.   void *CRYPTO_malloc(size_t num, const char *file, int line)
    120.   {
    121. >     void *ret = NULL;
    122.   
    123.       if (num <= 0)

crypto/mem.c:123:9: Taking false branch
    121.       void *ret = NULL;
    122.   
    123.       if (num <= 0)
                   ^
    124.           return NULL;
    125.   

crypto/mem.c:126:5: 
    124.           return NULL;
    125.   
    126. >     allow_customize = 0;
    127.   #ifndef OPENSSL_NO_CRYPTO_MDEBUG
    128.       if (call_malloc_debug) {

crypto/mem.c:136:5: 
    134.       }
    135.   #else
    136. >     (void)file;
    137.       (void)line;
    138.       ret = malloc(num);

crypto/mem.c:137:5: 
    135.   #else
    136.       (void)file;
    137. >     (void)line;
    138.       ret = malloc(num);
    139.   #endif

crypto/mem.c:138:5: 
    136.       (void)file;
    137.       (void)line;
    138. >     ret = malloc(num);
    139.   #endif
    140.   

crypto/mem.c:153:5: 
    151.   #endif
    152.   
    153. >     return ret;
    154.   }
    155.   

crypto/mem.c:154:1: return from a call to CRYPTO_malloc
    152.   
    153.       return ret;
    154. > }
    155.   
    156.   void *CRYPTO_zalloc(size_t num, const char *file, int line)

crypto/async/async.c:79:9: Taking false branch
  77.   
  78.       nctx = OPENSSL_malloc(sizeof (async_ctx));
  79.       if (nctx == NULL) {
                ^
  80.           ASYNCerr(ASYNC_F_ASYNC_CTX_NEW, ERR_R_MALLOC_FAILURE);
  81.           goto err;

crypto/async/async.c:85:5: 
  83.   
  84.       async_fibre_init_dispatcher(&nctx->dispatcher);
  85. >     nctx->currjob = NULL;
  86.       nctx->blocked = 0;
  87.       if (!async_set_ctx(nctx))

crypto/async/async.c:86:5: 
  84.       async_fibre_init_dispatcher(&nctx->dispatcher);
  85.       nctx->currjob = NULL;
  86. >     nctx->blocked = 0;
  87.       if (!async_set_ctx(nctx))
  88.           goto err;

crypto/async/async.c:87:10: Taking false branch
  85.       nctx->currjob = NULL;
  86.       nctx->blocked = 0;
  87.       if (!async_set_ctx(nctx))
                 ^
  88.           goto err;
  89.   

crypto/async/async.c:90:5: 
  88.           goto err;
  89.   
  90. >     return nctx;
  91.   err:
  92.       OPENSSL_free(nctx);

crypto/async/async.c:95:1: return from a call to async_ctx_new
  93.   
  94.       return NULL;
  95. > }
  96.   
  97.   static int async_ctx_free(void)

crypto/async/async.c:216:36: Taking false branch
214.                            void *args, size_t size)
215.   {
216.       if (async_get_ctx() == NULL && async_ctx_new() == NULL) {
                                          ^
217.           return ASYNC_ERR;
218.       }
