From e8b2cb872be0acab6606d7caf636a55a379ee6c0 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 14 Jul 2009 00:42:36 +0900 Subject: [PATCH] don't free() manually buffered input ports since they point to gc managed memory. --- eval.c | 6 ++++-- gc.c | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/eval.c b/eval.c index 2b8510f9..a8592aeb 100644 --- a/eval.c +++ b/eval.c @@ -1971,9 +1971,11 @@ static sexp sexp_close_port (sexp ctx, sexp port) { if (! sexp_port_openp(port)) return sexp_user_exception(ctx, SEXP_FALSE, "port already closed", port); if (sexp_port_stream(port)) - fclose(sexp_port_stream(port)); - if (sexp_port_buf(port)) + fclose(sexp_port_stream(port)); +#if ! USE_STRING_STREAMS + if (sexp_port_buf(port) && sexp_oportp(port)) free(sexp_port_buf(port)); +#endif sexp_port_openp(port) = 0; return SEXP_VOID; } diff --git a/gc.c b/gc.c index c7e2e955..ca6d0136 100644 --- a/gc.c +++ b/gc.c @@ -151,7 +151,6 @@ sexp sexp_sweep (sexp ctx, size_t *sum_freed_ptr) { sexp sexp_gc (sexp ctx, size_t *sum_freed) { sexp res; int i; - fprintf(stderr, "*********************** gc **********************\n"); sexp_mark(continuation_resumer); sexp_mark(final_resumer); for (i=0; i