1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 23:00:22 +02:00

Use `scm_gc_malloc ()' when allocating the allocated fluid vector.

* libguile/fluids.c (next_fluid_num): Use `scm_gc_malloc ()'.  Don't
  explicitly free the previously allocated array.
This commit is contained in:
Ludovic Courtès 2009-01-18 13:01:16 +01:00
parent 6bf4c3f9c1
commit 33ed7a1644

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1996,1997,2000,2001, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. /* Copyright (C) 1996,1997,2000,2001, 2004, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@ -152,9 +152,9 @@ next_fluid_num ()
/* FIXME: Since we use `scm_malloc ()', ALLOCATED_FLUIDS is scanned by /* FIXME: Since we use `scm_malloc ()', ALLOCATED_FLUIDS is scanned by
the GC; therefore, all fluids remain reachable for the entire the GC; therefore, all fluids remain reachable for the entire
program lifetime. Hopefully this is not a problem in practice. */ program lifetime. Hopefully this is not a problem in practice. */
char *prev_allocated_fluids;
char *new_allocated_fluids = char *new_allocated_fluids =
scm_malloc (allocated_fluids_len + FLUID_GROW); scm_gc_malloc (allocated_fluids_len + FLUID_GROW,
"allocated fluids");
/* Copy over old values and initialize rest. GC can not run /* Copy over old values and initialize rest. GC can not run
during these two operations since there is no safe point in during these two operations since there is no safe point in
@ -164,16 +164,11 @@ next_fluid_num ()
memset (new_allocated_fluids + allocated_fluids_len, 0, FLUID_GROW); memset (new_allocated_fluids + allocated_fluids_len, 0, FLUID_GROW);
n = allocated_fluids_len; n = allocated_fluids_len;
prev_allocated_fluids = allocated_fluids;
/* Update the vector of allocated fluids. Dynamic states will /* Update the vector of allocated fluids. Dynamic states will
eventually be lazily grown to accomodate the new value of eventually be lazily grown to accomodate the new value of
ALLOCATED_FLUIDS_LEN in `fluid-ref' and `fluid-set!'. */ ALLOCATED_FLUIDS_LEN in `fluid-ref' and `fluid-set!'. */
allocated_fluids = new_allocated_fluids; allocated_fluids = new_allocated_fluids;
allocated_fluids_len += FLUID_GROW; allocated_fluids_len += FLUID_GROW;
if (prev_allocated_fluids != NULL)
free (prev_allocated_fluids);
} }
allocated_fluids_num += 1; allocated_fluids_num += 1;