diff --git a/test/memleaktest.c b/test/memleaktest.c index cdb61a3608f7cbfe6659a7c24963f9a82f12a8c8..f8945904ac24b51a39b0cb7ef1238321226d4e45 100644 --- a/test/memleaktest.c +++ b/test/memleaktest.c @@ -56,23 +56,13 @@ #include #include #include -#include - -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -static sigjmp_buf env; - -static void handler(int sig) -{ - siglongjmp(env, 1); -} -#endif int main(int argc, char **argv) { #ifndef OPENSSL_NO_CRYPTO_MDEBUG char *p; char *lost; - int aborted = 0; + int noleak; p = getenv("OPENSSL_DEBUG_MEMORY"); if (p != NULL && strcmp(p, "on") == 0) @@ -85,18 +75,16 @@ int main(int argc, char **argv) return 1; } - signal(SIGABRT, handler); - if (argv[1] && strcmp(argv[1], "freeit") == 0) { OPENSSL_free(lost); lost = NULL; } - if (sigsetjmp(env, 0) == 0) - CRYPTO_mem_leaks_fp(stderr); - else - aborted = 1; - return ((lost != NULL) ^ (aborted == 1)); + noleak = CRYPTO_mem_leaks_fp(stderr); + /* If -1 return value something bad happened */ + if (noleak == -1) + return 1; + return ((lost != NULL) ^ (noleak == 0)); #else return 0; #endif