-- if (HDR(p) -> hb_obj_kind == PTRFREE) {
-- GC_err_printf0("Leaked atomic object at ");
-- } else {
-- GC_err_printf0("Leaked composite object at ");
-- }
-- GC_print_heap_obj(p);
-- GC_err_printf0("\n");
-+ if (leak_handler != NULL)
-+ leak_handler((void*)p, (int)sz);
- }
-
--# define FOUND_FREE(hblk, word_no) \
-- { \
-- report_leak((ptr_t)hblk + WORDS_TO_BYTES(word_no), \
-- HDR(hblk) -> hb_sz); \
-- }
-+#define FOUND_FREE(hblk, word_no) \
-+ report_leak((ptr_t)hblk + WORDS_TO_BYTES(word_no), HDR(hblk)->hb_sz);
-
- /*
- * reclaim phase
+@@ -64,6 +72,12 @@
+ if (GC_debugging_started) GC_print_all_smashed();
+ for (i = 0; i < GC_n_leaked; ++i) {
+ ptr_t p = GC_leaked[i];
++ if (leak_handler)
++ {
++ leak_handler(GC_base(p), GC_size(GC_base(p)));
++ }
++ else
++ {
+ if (HDR(p) -> hb_obj_kind == PTRFREE) {
+ GC_err_printf0("Leaked atomic object at ");
+ } else {
+@@ -71,6 +85,7 @@
+ }
+ GC_print_heap_obj(p);
+ GC_err_printf0("\n");
++ }
+ GC_free(p);
+ GC_leaked[i] = 0;
+ }