diff --git a/src/lib/task.rs b/src/lib/task.rs index 09a914716e1..1c462108b2e 100644 --- a/src/lib/task.rs +++ b/src/lib/task.rs @@ -22,25 +22,27 @@ export spawn; export spawn_notify; export spawn_joinable; -native "rust" mod rustrt { // C Stack? - fn task_sleep(time_in_us: uint); // No - fn task_yield(); // No - fn start_task(id: task_id, closure: *u8); // No - fn task_join(t: task_id) -> int; // Refactor +native "cdecl" mod rustrt { + // these must run on the Rust stack so that they can swap stacks etc: + fn task_sleep(time_in_us: uint); + fn task_yield(); + fn start_task(id: task_id, closure: *u8); + fn task_join(t: task_id) -> int; } native "c-stack-cdecl" mod rustrt2 = "rustrt" { - fn pin_task(); // Yes - fn unpin_task(); // Yes - fn get_task_id() -> task_id; // Yes + // these can run on the C stack: + fn pin_task(); + fn unpin_task(); + fn get_task_id() -> task_id; - fn set_min_stack(stack_size: uint); // Yes + fn set_min_stack(stack_size: uint); fn new_task() -> task_id; fn drop_task(task: *rust_task); fn get_task_pointer(id: task_id) -> *rust_task; - fn migrate_alloc(alloc: *u8, target: task_id); // Yes + fn migrate_alloc(alloc: *u8, target: task_id); } type rust_task =