From 7979bbbf5132104ca3359919f7c515e3a9d8dcd6 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 23 Sep 2011 17:56:55 -0700 Subject: rt: Sweep in cycle collection --- src/rt/rust_cc.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/rt/rust_cc.cpp') diff --git a/src/rt/rust_cc.cpp b/src/rt/rust_cc.cpp index c0a7c4b4740..9d6c4992b17 100644 --- a/src/rt/rust_cc.cpp +++ b/src/rt/rust_cc.cpp @@ -409,7 +409,18 @@ sweep(rust_task *task, const std::set &marked) { while (begin != end) { void *alloc = begin->first; if (marked.find(alloc) == marked.end()) { + const type_desc *tydesc = begin->second; + DPRINT("object is part of a cycle: %p\n", alloc); + + // Run the destructor. + // TODO: What if it fails? + if (tydesc->drop_glue) { + tydesc->drop_glue(NULL, task, (void *)tydesc, + tydesc->first_param, alloc); + } + + task->free(alloc); } ++begin; } @@ -418,8 +429,8 @@ sweep(rust_task *task, const std::set &marked) { void do_cc(rust_task *task) { - DPRINT("cc; n allocs = %lu\n", - (long unsigned int)task->local_allocs.size()); + //DPRINT("cc; n allocs = %lu\n", + // (long unsigned int)task->local_allocs.size()); irc_map ircs; irc::compute_ircs(task, ircs); -- cgit 1.4.1-3-g733a5