diff options
| author | Keith Packard <keithp@keithp.com> | 2017-12-03 19:47:03 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2017-12-03 19:47:03 -0800 | 
| commit | ed6967cef5d82baacafe1c23229f44d58c838326 (patch) | |
| tree | 42a297a91356516df606d5a31002f6caa1df3b8a /src/lisp/ao_lisp_mem.c | |
| parent | b9009b3916956db00b7b78bd06fb0df704690eb1 (diff) | |
altos/lisp: Split out read debug, add memory validation
Split read debug into a separate #define to reduce debug noise
Add some memory validation -- validate stash API, and validate
cons_free calls.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lisp/ao_lisp_mem.c')
| -rw-r--r-- | src/lisp/ao_lisp_mem.c | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/src/lisp/ao_lisp_mem.c b/src/lisp/ao_lisp_mem.c index 3a704380..5471b137 100644 --- a/src/lisp/ao_lisp_mem.c +++ b/src/lisp/ao_lisp_mem.c @@ -16,6 +16,7 @@  #include "ao_lisp.h"  #include <stdio.h> +#include <assert.h>  #ifdef AO_LISP_MAKE_CONST @@ -623,6 +624,32 @@ ao_lisp_collect(uint8_t style)  	return AO_LISP_POOL - ao_lisp_top;  } +#if DBG_FREE_CONS +void +ao_lisp_cons_check(struct ao_lisp_cons *cons) +{ +	ao_poly	cdr; +	int offset; + +	chunk_low = 0; +	reset_chunks(); +	walk(ao_lisp_mark_ref, ao_lisp_poly_mark_ref); +	while (cons) { +		if (!AO_LISP_IS_POOL(cons)) +			break; +		offset = pool_offset(cons); +		if (busy(ao_lisp_busy, offset)) { +			ao_lisp_printf("cons at %p offset %d poly %d is busy\n\t%v\n", cons, offset, ao_lisp_cons_poly(cons), ao_lisp_cons_poly(cons)); +			abort(); +		} +		cdr = cons->cdr; +		if (!ao_lisp_is_pair(cdr)) +			break; +		cons = ao_lisp_poly_cons(cdr); +	} +} +#endif +  /*   * Mark interfaces for objects   */ @@ -883,6 +910,7 @@ ao_lisp_alloc(int size)  void  ao_lisp_cons_stash(int id, struct ao_lisp_cons *cons)  { +	assert(save_cons[id] == 0);  	save_cons[id] = cons;  } @@ -897,6 +925,7 @@ ao_lisp_cons_fetch(int id)  void  ao_lisp_poly_stash(int id, ao_poly poly)  { +	assert(save_poly[id] == AO_LISP_NIL);  	save_poly[id] = poly;  } @@ -911,6 +940,7 @@ ao_lisp_poly_fetch(int id)  void  ao_lisp_string_stash(int id, char *string)  { +	assert(save_string[id] == NULL);  	save_string[id] = string;  } @@ -925,6 +955,7 @@ ao_lisp_string_fetch(int id)  void  ao_lisp_frame_stash(int id, struct ao_lisp_frame *frame)  { +	assert(save_frame[id] == NULL);  	save_frame[id] = frame;  } | 
