diff options
author | Daniel Dragan <bulk88@hotmail.com> | 2014-05-20 03:23:01 -0400 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2014-11-15 06:57:53 -0800 |
commit | 6edcbed6404ee551719c9a49397baea538aae7cc (patch) | |
tree | ad31ebdeaa29319bfb89b5dd28ab266feb6cef03 /util.c | |
parent | 1f9498d0e14a8f9d5a95c29b732bb33bb3c669d8 (diff) | |
download | perl-6edcbed6404ee551719c9a49397baea538aae7cc.tar.gz |
make debugging easier in memory allocator code in perl.c and util.c
-show intermediate values to make C debugging easier
-Perl_safesysfree overwrote var where with a different value, this caused
alot of confusion for me of trying to hunt for a pointer from a stack
trace with conditional breakpoints, so don't change var where in an
unoptimized build
-in Perl_safesysrealloc and Perl_safesysmalloc provide 1 exit path, so
the returned value is easily seen and BPed on unoptimized builds
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -172,14 +172,17 @@ Perl_safesysmalloc(MEM_SIZE size) #endif ptr = (Malloc_t)((char*)ptr+PERL_MEMORY_DEBUG_HEADER_SIZE); DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) malloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size)); + ret: return ptr; } else { #ifndef ALWAYS_NEED_THX dTHX; #endif - if (PL_nomemok) - return NULL; + if (PL_nomemok){ + ptr = NULL; + goto ret; + } else { croak_no_mem(); } @@ -207,11 +210,14 @@ Perl_safesysrealloc(Malloc_t where,MEM_SIZE size) if (!size) { safesysfree(where); - return NULL; + ptr = NULL; + goto ret; } - if (!where) - return safesysmalloc(size); + if (!where) { + ptr = safesysmalloc(size); + goto ret; + } #ifdef USE_MDH where = (Malloc_t)((char*)where-PERL_MEMORY_DEBUG_HEADER_SIZE); size += PERL_MEMORY_DEBUG_HEADER_SIZE; @@ -293,14 +299,17 @@ Perl_safesysrealloc(Malloc_t where,MEM_SIZE size) if (ptr != NULL) { + ret: return ptr; } else { #ifndef ALWAYS_NEED_THX dTHX; #endif - if (PL_nomemok) - return NULL; + if (PL_nomemok){ + ptr = NULL; + goto ret; + } else { croak_no_mem(); } @@ -319,10 +328,10 @@ Perl_safesysfree(Malloc_t where) DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) free\n",PTR2UV(where),(long)PL_an++)); if (where) { #ifdef USE_MDH - where = (Malloc_t)((char*)where-PERL_MEMORY_DEBUG_HEADER_SIZE); + Malloc_t where_intrn = (Malloc_t)((char*)where-PERL_MEMORY_DEBUG_HEADER_SIZE); { struct perl_memory_debug_header *const header - = (struct perl_memory_debug_header *)where; + = (struct perl_memory_debug_header *)where_intrn; # ifdef MDH_HAS_SIZE const MEM_SIZE size = header->size; @@ -352,21 +361,23 @@ Perl_safesysfree(Malloc_t where) maybe_protect_ro(header->prev); maybe_protect_rw(header); # ifdef PERL_POISON - PoisonNew(where, size, char); + PoisonNew(where_intrn, size, char); # endif /* Trigger the duplicate free warning. */ header->next = NULL; # endif # ifdef PERL_DEBUG_READONLY_COW - if (munmap(where, size)) { + if (munmap(where_intrn, size)) { perror("munmap failed"); abort(); } # endif } -#endif +#else + Malloc_t where_intrn = where; +#endif /* USE_MDH */ #ifndef PERL_DEBUG_READONLY_COW - PerlMem_free(where); + PerlMem_free(where_intrn); #endif } } |