X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fmem_dbg.c;h=14770c073377df6bc107b5ac89c197d38c89d286;hb=2da0c119260afd15433dde7c431c69c837ee840b;hp=b80fcea44f2e88a810cb0b8ce7ec9a959d81d7c8;hpb=75acc288ca8f36e8f50cd8119ac617815b7146d5;p=oweals%2Fopenssl.git diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index b80fcea44f..14770c0733 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -88,9 +88,9 @@ typedef struct app_mem_info_st /* For application-defined information (static C-string `info') * to be displayed in memory leak list. * Each thread has its own stack. For applications, there is - * CRYPTO_add_info("...") to push an entry, - * CRYPTO_remove_info() to pop an entry, - * CRYPTO_remove_all_info() to pop all entries. + * CRYPTO_push_info("...") to push an entry, + * CRYPTO_pop_info() to pop an entry, + * CRYPTO_remove_all_info() to pop all entries. */ { unsigned long thread; @@ -214,7 +214,7 @@ void CRYPTO_dbg_set_options(long bits) options = bits; } -long CRYPTO_dbg_get_options() +long CRYPTO_dbg_get_options(void) { return options; } @@ -249,7 +249,7 @@ static unsigned long app_info_hash(APP_INFO *a) return(ret); } -static APP_INFO *remove_info() +static APP_INFO *pop_info() { APP_INFO tmp; APP_INFO *ret = NULL; @@ -257,7 +257,7 @@ static APP_INFO *remove_info() if (amih != NULL) { tmp.thread=CRYPTO_thread_id(); - if ((ret=(APP_INFO *)lh_delete(amih,(char *)&tmp)) != NULL) + if ((ret=(APP_INFO *)lh_delete(amih,&tmp)) != NULL) { APP_INFO *next=ret->next; @@ -269,7 +269,7 @@ static APP_INFO *remove_info() #ifdef LEVITTE_DEBUG if (ret->thread != tmp.thread) { - fprintf(stderr, "remove_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", + fprintf(stderr, "pop_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", ret->thread, tmp.thread); abort(); } @@ -286,7 +286,7 @@ static APP_INFO *remove_info() return(ret); } -int CRYPTO_add_info_(const char *info, const char *file, int line) +int CRYPTO_push_info_(const char *info, const char *file, int line) { APP_INFO *ami, *amim; int ret=0; @@ -322,7 +322,7 @@ int CRYPTO_add_info_(const char *info, const char *file, int line) #ifdef LEVITTE_DEBUG if (ami->thread != amim->thread) { - fprintf(stderr, "CRYPTO_add_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", + fprintf(stderr, "CRYPTO_push_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", amim->thread, ami->thread); abort(); } @@ -336,7 +336,7 @@ int CRYPTO_add_info_(const char *info, const char *file, int line) return(ret); } -int CRYPTO_remove_info(void) +int CRYPTO_pop_info(void) { int ret=0; @@ -344,7 +344,7 @@ int CRYPTO_remove_info(void) { MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ - ret=(remove_info() != NULL); + ret=(pop_info() != NULL); MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ } @@ -359,7 +359,7 @@ int CRYPTO_remove_all_info(void) { MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ - while(remove_info() != NULL) + while(pop_info() != NULL) ret++; MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ @@ -592,9 +592,11 @@ static void print_leak(MEM *m, MEM_LEAK *l) amip=m->app_info; ami_cnt=0; - if (amip) - ti=amip->thread; - while(amip && amip->thread == ti) + if (!amip) + return; + ti=amip->thread; + + do { int buf_len; int info_len; @@ -622,10 +624,12 @@ static void print_leak(MEM *m, MEM_LEAK *l) amip = amip->next; } + while(amip && amip->thread == ti); + #ifdef LEVITTE_DEBUG if (amip) { - fprintf(stderr, "Thread switch detected i backtrace!!!!\n"); + fprintf(stderr, "Thread switch detected in backtrace!!!!\n"); abort(); } #endif @@ -657,21 +661,29 @@ void CRYPTO_mem_leaks(BIO *b) #endif } -static void (*mem_cb)()=NULL; +union void_fn_to_char_u + { + char *char_p; + void (*fn_p)(); + }; static void cb_leak(MEM *m, char *cb) { - void (*mem_callback)()=(void (*)())cb; - mem_callback(m->order,m->file,m->line,m->num,m->addr); + union void_fn_to_char_u mem_callback; + + mem_callback.char_p=cb; + mem_callback.fn_p(m->order,m->file,m->line,m->num,m->addr); } void CRYPTO_mem_leaks_cb(void (*cb)()) { + union void_fn_to_char_u mem_cb; + if (mh == NULL) return; CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); - mem_cb=cb; - lh_doall_arg(mh,(void (*)())cb_leak,(char *)mem_cb); - mem_cb=NULL; + mem_cb.fn_p=cb; + lh_doall_arg(mh,(void (*)())cb_leak,mem_cb.char_p); + mem_cb.char_p=NULL; CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); }