Add rust_task::gc(size_t args) method that drops us back into the GC glue.

This commit is contained in:
Graydon Hoare 2010-06-25 16:54:03 -07:00
parent 67d1f0a9aa
commit eed5c0aa24
3 changed files with 16 additions and 0 deletions

View File

@ -26,6 +26,11 @@ rust_crate::get_unwind_glue() const {
return ((uintptr_t)this + unwind_glue_off);
}
uintptr_t
rust_crate::get_gc_glue() const {
return ((uintptr_t)this + gc_glue_off);
}
uintptr_t
rust_crate::get_yield_glue() const {
return ((uintptr_t)this + yield_glue_off);

View File

@ -660,6 +660,9 @@ rust_task : public rc_base<rust_task>,
// Fail self, assuming caller-on-stack is this task.
void fail(size_t nargs);
// Run the gc glue on the task stack.
void gc(size_t nargs);
// Notify tasks waiting for us that we are about to die.
void notify_waiting_tasks();

View File

@ -345,6 +345,14 @@ rust_task::fail(size_t nargs) {
}
}
void
rust_task::gc(size_t nargs)
{
dom->log(rust_log::TASK|rust_log::MEM,
"task 0x%" PRIxPTR " garbage collecting", this);
run_after_return(nargs, dom->root_crate->get_gc_glue());
}
void
rust_task::notify_waiting_tasks()
{