diff --git a/src/gc.c b/src/gc.c index 647f7bcebe1f3847f61f29c4eaaef5485e07a0a9..bf0a599ac051b86c198c8fd2a74cc7f4bdfdfeba 100644 --- a/src/gc.c +++ b/src/gc.c @@ -30,7 +30,7 @@ struct callback *gc_evaluator_callback=0; #include "block_alloc.h" -RCSID("$Id: gc.c,v 1.172 2001/08/30 23:21:54 mast Exp $"); +RCSID("$Id: gc.c,v 1.173 2001/09/06 16:53:43 mast Exp $"); /* Run garbage collect approximately every time * 20 percent of all arrays, objects and programs is @@ -633,6 +633,8 @@ static void gdb_gc_stop_here(void *a, int weak) describe_something(found_in, found_in_type, 2, 0, DESCRIBE_MEM, 0); } } + else + fputc('\n', stderr); fprintf(stderr,"----------end------------\n"); } @@ -648,6 +650,19 @@ void debug_gc_xmark_svalues(struct svalue *s, ptrdiff_t num, char *fromwhere) found_in=0; } +void debug_gc_xmark_svalues2(struct svalue *s, ptrdiff_t num, + int data_type, void *data, char *fromwhere) +{ + char *old_found_where = found_where; + if (fromwhere) found_where = fromwhere; + found_in=data; + found_in_type=data_type; + gc_xmark_svalues(s,num); + found_where=old_found_where; + found_in_type=PIKE_T_UNKNOWN; + found_in=0; +} + void debug_gc_check_svalues2(struct svalue *s, ptrdiff_t num, int data_type, void *data, char *fromwhere) { diff --git a/src/gc.h b/src/gc.h index 417eaddd2d6d1f55a610c80b0c72c873bdf998a7..e17feda46c9647b74df40cd891c6468a638668f7 100644 --- a/src/gc.h +++ b/src/gc.h @@ -1,5 +1,5 @@ /* - * $Id: gc.h,v 1.85 2001/08/20 18:08:13 mast Exp $ + * $Id: gc.h,v 1.86 2001/09/06 16:53:44 mast Exp $ */ #ifndef GC_H #define GC_H @@ -204,6 +204,8 @@ void describe_location(void *real_memblock, int flags); void debug_gc_fatal(void *a, int flags, const char *fmt, ...); void debug_gc_xmark_svalues(struct svalue *s, ptrdiff_t num, char *fromwhere); +void debug_gc_xmark_svalues2(struct svalue *s, ptrdiff_t num, + int data_type, void *data, char *fromwhere); void debug_gc_check_svalues2(struct svalue *s, ptrdiff_t num, int data_type, void *data, char *fromwhere); void debug_gc_check_weak_svalues2(struct svalue *s, ptrdiff_t num, @@ -315,7 +317,8 @@ void cleanup_gc(void); #define debug_gc_check_weak_svalues2(S,N,T,V,F) gc_check_weak_svalues((S),N) #define debug_gc_check_short_svalue2(S,N,T,V,F) gc_check_short_svalue((S),N) #define debug_gc_check_weak_short_svalue2(S,N,T,V,F) gc_check_weak_short_svalue((S),N) -#define debug_gc_xmark_svalues(S,N,X) gc_xmark_svalues((S),N) +#define debug_gc_xmark_svalues(S,N,F) gc_xmark_svalues((S),N) +#define debug_gc_xmark_svalues2(S,N,T,V,F) gc_xmark_svalues((S),N) #define debug_gc_check2(VP,T,V,F) gc_check((VP)) #endif @@ -332,10 +335,10 @@ void cleanup_gc(void); #define gc_is_referenced(X) !(get_marker(X)->flags & GC_NOT_REFERENCED) #endif -#define gc_external_mark2(X,Y,Z) \ - DMALLOC_TOUCH_MARKER(X, gc_external_mark3( debug_malloc_pass(X),(Y),(Z))) +#define gc_external_mark2(X,IN,WHERE) \ + DMALLOC_TOUCH_MARKER(X, gc_external_mark3( debug_malloc_pass(X),(IN),(WHERE))) #define gc_external_mark(X) \ - DMALLOC_TOUCH_MARKER(X, gc_external_mark2( (X)," externally", 0)) + DMALLOC_TOUCH_MARKER(X, gc_external_mark2( (X), 0, " externally")) #define add_gc_callback(X,Y,Z) \ dmalloc_touch(struct callback *,debug_add_gc_callback((X),(Y),(Z)))