about summary refs log tree commit diff
path: root/src/rt
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2012-08-03 21:00:23 -0400
committerBen Blum <bblum@andrew.cmu.edu>2012-08-03 21:00:23 -0400
commit4174de8bb941c3edbeb14f42ab4ebbfff5fb176d (patch)
tree03b802a61a79fb6d74422fd16b2a655165f3b635 /src/rt
parentf57760c609d636d2e4698a26848f5c990d417265 (diff)
downloadrust-4174de8bb941c3edbeb14f42ab4ebbfff5fb176d.tar.gz
rust-4174de8bb941c3edbeb14f42ab4ebbfff5fb176d.zip
rt: expose rust_task refcounts to rustland
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust_builtin.cpp12
-rw-r--r--src/rt/rustrt.def.in2
2 files changed, 14 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index f9c95db1d04..1ba941c233c 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -968,6 +968,18 @@ task_signal_event(rust_task *target, void *event) {
     target->signal_event(event);
 }
 
+// Can safely run on the rust stack.
+extern "C" void
+rust_task_ref(rust_task *task) {
+    task->ref();
+}
+
+// Don't run on the rust stack!
+extern "C" void
+rust_task_deref(rust_task *task) {
+    task->deref();
+}
+
 //
 // Local Variables:
 // mode: C++
diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in
index b3bc75d03c5..997dcf0e668 100644
--- a/src/rt/rustrt.def.in
+++ b/src/rt/rustrt.def.in
@@ -194,3 +194,5 @@ rust_signal_cond_lock
 rust_get_task_local_data
 rust_set_task_local_data
 rust_task_local_data_atexit
+rust_task_ref
+rust_task_deref