X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/763d5e6ad88ef3ba1cd1d7742d060e4f1e54c6b8..902b7f9d095cc888d9482a77ca5aec9ec4341352:/lib/mem.c diff --git a/lib/mem.c b/lib/mem.c index b723a74..c2dd40c 100644 --- a/lib/mem.c +++ b/lib/mem.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004, 2005, 2006 Richard Kettlewell + * Copyright (C) 2004, 2005, 2006, 2007 Richard Kettlewell * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,11 +21,14 @@ #include #include "types.h" +#if GC #include +#endif #include #include #include #include +#include #include "mem.h" #include "log.h" @@ -33,11 +36,6 @@ #include "disorder.h" -static void *(*do_malloc)(size_t) = GC_malloc; -static void *(*do_realloc)(void *, size_t) = GC_realloc; -static void *(*do_malloc_atomic)(size_t) = GC_malloc_atomic; -static void (*do_free)(void *) = GC_free; - static void *malloc_and_zero(size_t n) { void *ptr = malloc(n); @@ -45,16 +43,32 @@ static void *malloc_and_zero(size_t n) { return ptr; } -void mem_init(int gc) { +#if GC +static void *(*do_malloc)(size_t) = GC_malloc; +static void *(*do_realloc)(void *, size_t) = GC_realloc; +static void *(*do_malloc_atomic)(size_t) = GC_malloc_atomic; +static void (*do_free)(void *) = GC_free; +#else +static void *(*do_malloc)(size_t) = malloc_and_zero; +static void *(*do_realloc)(void *, size_t) = realloc; +static void *(*do_malloc_atomic)(size_t) = malloc; +static void (*do_free)(void *) = free; +#endif + +void mem_init(void) { +#if GC const char *e; - if(!gc || ((e = getenv("DISORDER_GC")) && !strcmp(e, "no"))) { + if(((e = getenv("DISORDER_GC")) && !strcmp(e, "no"))) { do_malloc = malloc_and_zero; do_malloc_atomic = malloc; do_realloc = realloc; do_free = free; - } else + } else { GC_init(); + assert(GC_all_interior_pointers); + } +#endif } void *xmalloc(size_t n) {