1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-07-04 00:30:30 +02:00

* gc.c (scm_done_free): new.

expanded comments about scm_done_malloc.

* gc.h: added prototype for scm_done_free
This commit is contained in:
Michael Livshin 2000-07-15 13:44:04 +00:00
parent 32d0d4b1e3
commit 9d47a1e6f2
4 changed files with 44 additions and 17 deletions

7
NEWS
View file

@ -55,6 +55,13 @@ Example:
* Changes to the scm_ interface
** New function: scm_done_free (long size)
This function is the inverse of scm_done_malloc. Use it to report the
amount of smob memory you free. The previous method, which involved
calling scm_done_malloc with negative argument, was somewhat
unintuitive (and is still available, of course).
** New global variable scm_gc_running_p introduced.
Use this variable to find out if garbage collection is being executed. Up to

View file

@ -1,3 +1,10 @@
2000-07-15 Michael Livshin <mlivshin@bigfoot.com>
* gc.c (scm_done_free): new.
expanded comments about scm_done_malloc.
* gc.h: added prototype for scm_done_free
2000-07-13 Dirk Herrmann <D.Herrmann@tu-bs.de>
* gc.h (scm_take_stdin): Removed.

View file

@ -1733,12 +1733,12 @@ scm_gc_sweep ()
/* {Front end to malloc}
*
* scm_must_malloc, scm_must_realloc, scm_must_free, scm_done_malloc
* scm_must_malloc, scm_must_realloc, scm_must_free, scm_done_malloc,
* scm_done_free
*
* These functions provide services comperable to malloc, realloc, and
* free. They are for allocating malloced parts of scheme objects.
* The primary purpose of the front end is to impose calls to gc.
*/
* The primary purpose of the front end is to impose calls to gc. */
/* scm_must_malloc
@ -1864,7 +1864,13 @@ scm_must_free (void *obj)
* reason). When a new object of this smob is created you call
* scm_done_malloc with the size of the object. When your smob free
* function is called, be sure to include this size in the return
* value. */
* value.
*
* If you can't actually free the memory in the smob free function,
* for whatever reason (like reference counting), you still can (and
* should) report the amount of memory freed when you actually free it.
* Do it by calling scm_done_malloc with the _negated_ size. Clever,
* eh? Or even better, call scm_done_free. */
void
scm_done_malloc (long size)
@ -1884,6 +1890,12 @@ scm_done_malloc (long size)
}
}
void
scm_done_free (long size)
{
scm_mallocated -= size;
}

View file

@ -284,6 +284,7 @@ extern void * scm_must_realloc (void *where,
scm_sizet olen, scm_sizet len,
const char *what);
extern void scm_done_malloc (long size);
extern void scm_done_free (long size);
extern void scm_must_free (void *obj);
extern void scm_remember (SCM * ptr);
extern SCM scm_return_first (SCM elt, ...);