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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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