1997-01-28
1997-01-28 03:02:08 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
-
4a578f66634effa53b30183a498317c21823918c
(26 lines)
(+22/-4)
[
Show
| Annotate
]
Branch: 7.9
more debug added, gc_callback added
Rev: src/gc.c:1.7
Rev: src/gc.h:1.6
15:
#include "mapping.h"
#include "object.h"
#include "program.h"
+ #include "stralloc.h"
#include "gc.h"
#include "main.h"
37:
static double objects_alloced;
static double objects_freed;
+ struct callback_list gc_callbacks;
+
+ struct callback *add_gc_callback(callback_func call,
+ void *arg,
+ callback_func free_func)
+ {
+ return add_to_callback(&gc_callbacks, call, arg, free_func);
+ }
+
#define GC_REFERENCED 1
struct marker
104:
}
#endif
- void gc_check(void *a)
+ INT32 gc_check(void *a)
{
#ifdef DEBUG
if(check_for)
113: Inside #if defined(DEBUG)
{
gdb_gc_stop_here(a);
}
- return;
+ return 0;
}
#endif
- getmark(a)->refs++;
+ return getmark(a)->refs++;
}
int gc_is_referenced(void *a)
133: Inside #if defined(DEBUG)
gc_check_all_mappings();
gc_check_all_programs();
gc_check_all_objects();
+ call_callback(& gc_callbacks, (void *)0);
check_for=0;
fatal("Ref counts are totally wrong!!!\n");
235:
* num_objects/4, this will assure that no re-hashing is needed.
*/
hashsize=my_log2(num_objects);
- hashsize-=2;
+
+ if(!d_flag) hashsize-=2;
+
if(hashsize<0) hashsize=0;
hashsize=hashprimes[hashsize];
hash=(struct marker **)xalloc(sizeof(struct marker **)*hashsize);
247:
gc_check_all_mappings();
gc_check_all_programs();
gc_check_all_objects();
+ call_callback(& gc_callbacks, (void *)0);
gc_mark_all_arrays();
gc_mark_all_multisets();
254:
gc_mark_all_programs();
gc_mark_all_objects();
+ if(d_flag)
+ gc_mark_all_strings();
+
gc_free_all_unreferenced_arrays();
gc_free_all_unreferenced_multisets();
gc_free_all_unreferenced_mappings();