=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/gc/dbg_mlc.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- OpenXM_contrib2/asir2000/gc/dbg_mlc.c 1999/12/03 07:39:09 1.1 +++ OpenXM_contrib2/asir2000/gc/dbg_mlc.c 2000/04/10 08:31:30 1.2 @@ -343,10 +343,10 @@ void GC_start_debugging() } # ifdef GC_ADD_CALLER -# define EXTRA_ARGS word ra, char * s, int i +# define EXTRA_ARGS word ra, CONST char * s, int i # define OPT_RA ra, # else -# define EXTRA_ARGS char * s, int i +# define EXTRA_ARGS CONST char * s, int i # define OPT_RA # endif @@ -531,13 +531,15 @@ GC_PTR p; GC_PTR p; # endif { - register GC_PTR base = GC_base(p); + register GC_PTR base; register ptr_t clobbered; + if (0 == p) return; + base = GC_base(p); if (base == 0) { GC_err_printf1("Attempt to free invalid pointer %lx\n", (unsigned long)p); - if (p != 0) ABORT("free(invalid pointer)"); + ABORT("free(invalid pointer)"); } if ((ptr_t)p - (ptr_t)base != sizeof(oh)) { GC_err_printf1( @@ -557,24 +559,22 @@ GC_PTR p; /* Invalidate size */ ((oh *)base) -> oh_sz = GC_size(base); } -# ifdef FIND_LEAK + if (GC_find_leak) { GC_free(base); -# else - { - register hdr * hhdr = HDR(p); - GC_bool uncollectable = FALSE; + } else { + register hdr * hhdr = HDR(p); + GC_bool uncollectable = FALSE; - if (hhdr -> hb_obj_kind == UNCOLLECTABLE) { - uncollectable = TRUE; - } -# ifdef ATOMIC_UNCOLLECTABLE - if (hhdr -> hb_obj_kind == AUNCOLLECTABLE) { - uncollectable = TRUE; - } -# endif - if (uncollectable) GC_free(base); + if (hhdr -> hb_obj_kind == UNCOLLECTABLE) { + uncollectable = TRUE; } -# endif +# ifdef ATOMIC_UNCOLLECTABLE + if (hhdr -> hb_obj_kind == AUNCOLLECTABLE) { + uncollectable = TRUE; + } +# endif + if (uncollectable) GC_free(base); + } /* !GC_find_leak */ } # ifdef __STDC__