1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-07-04 16:50:25 +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 * 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. ** New global variable scm_gc_running_p introduced.
Use this variable to find out if garbage collection is being executed. Up to 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> 2000-07-13 Dirk Herrmann <D.Herrmann@tu-bs.de>
* gc.h (scm_take_stdin): Removed. * gc.h (scm_take_stdin): Removed.

View file

@ -1733,12 +1733,12 @@ scm_gc_sweep ()
/* {Front end to malloc} /* {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 * These functions provide services comperable to malloc, realloc, and
* free. They are for allocating malloced parts of scheme objects. * 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 /* scm_must_malloc
@ -1864,7 +1864,13 @@ scm_must_free (void *obj)
* reason). When a new object of this smob is created you call * 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 * 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 * 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 void
scm_done_malloc (long size) 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, scm_sizet olen, scm_sizet len,
const char *what); const char *what);
extern void scm_done_malloc (long size); extern void scm_done_malloc (long size);
extern void scm_done_free (long size);
extern void scm_must_free (void *obj); extern void scm_must_free (void *obj);
extern void scm_remember (SCM * ptr); extern void scm_remember (SCM * ptr);
extern SCM scm_return_first (SCM elt, ...); extern SCM scm_return_first (SCM elt, ...);