From 3f781f75d94679435071caa94cbe104e8efcbd72 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 8 Oct 2007 11:40:43 +0000 Subject: [PATCH] fix arity check for bad procedure structs, fix accounting-trggered GC svn: r7447 --- src/mzscheme/gc2/newgc.c | 6 +++--- src/mzscheme/src/fun.c | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 090589bdb3..3fc2666f84 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -1544,7 +1544,7 @@ inline static unsigned long custodian_usage(void *custodian) if(!really_doing_accounting) { park[0] = custodian; really_doing_accounting = 1; - garbage_collect(0); + garbage_collect(1); custodian = park[0]; park[0] = NULL; } @@ -1757,7 +1757,7 @@ inline static void add_account_hook(int type,void *c1,void *c2,unsigned long b) if(!really_doing_accounting) { park[0] = c1; park[1] = c2; really_doing_accounting = 1; - garbage_collect(0); + garbage_collect(1); c1 = park[0]; c2 = park[1]; park[0] = park[1] = NULL; } @@ -2982,7 +2982,7 @@ static void garbage_collect(int force_full) TIME_STEP("reset"); - /* new we do want the allocator freaking if we go over half */ + /* now we do want the allocator freaking if we go over half */ in_unsafe_allocation_mode = 0; /* If we have too many idle pages, flush: */ diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 6de6686ba3..a1928ca9c7 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -2664,8 +2664,12 @@ static Scheme_Object *get_or_check_arity(Scheme_Object *p, long a, Scheme_Object } } else { p = scheme_extract_struct_procedure(p, -1, NULL, &is_method); - if (!SCHEME_PROCP(p)) - return scheme_null; + if (!SCHEME_PROCP(p)) { + if (a == -1) + return scheme_null; + else + return scheme_false; + } if (is_method) drop++; }