Branch: Tag:

2004-04-18

2004-04-18 02:16:06 by Martin Stjernholm <mast@lysator.liu.se>

Improved debug during cleanup: If there are internal refs that the gc don't
know about it will free them during the leak report. When they then are
freed from their real places later on, they will run out of refs. Therefore
the debug now prints all locations the leaked objects are freed from.

Rev: src/array.h:1.59
Rev: src/dmalloc.h:1.50
Rev: src/gc.c:1.253
Rev: src/gc.h:1.112
Rev: src/main.c:1.200
Rev: src/mapping.h:1.54
Rev: src/multiset.h:1.34
Rev: src/object.h:1.82
Rev: src/program.c:1.563
Rev: src/program.h:1.202

2:   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: program.h,v 1.201 2004/03/16 12:46:51 grubba Exp $ + || $Id: program.h,v 1.202 2004/04/18 02:16:06 mast Exp $   */      #ifndef PROGRAM_H
564:   #define FIND_LFUN(P,N) ( dmalloc_touch(struct program *,(P))->flags & PROGRAM_FIXED?((P)->lfuns[(N)]):low_find_lfun((P), (N)) )   #define QUICK_FIND_LFUN(P,N) (dmalloc_touch(struct program *,(P))->lfuns[N])    - #define free_program(p) do{ struct program *_=(p); debug_malloc_touch(_); if(!sub_ref(_)) really_free_program(_); }while(0) + #define free_program(p) do{ \ +  struct program *_=(p); \ +  debug_malloc_touch(_); \ +  DO_IF_PIKE_CLEANUP ( \ +  if (gc_external_refs_zapped) \ +  gc_check_zapped (_, PIKE_T_PROGRAM, __FILE__, __LINE__); \ +  ); \ +  if(!sub_ref(_)) \ +  really_free_program(_); \ +  }while(0)      BLOCK_ALLOC_FILL_PAGES(program, n/a)