diff --git a/redox-rt/src/thread.rs b/redox-rt/src/thread.rs
index a63edeaf248002340355fe46370b2da7e991b6d9..19b3efc66a69533fc4ca035662bda1ef51d6a613 100644
--- a/redox-rt/src/thread.rs
+++ b/redox-rt/src/thread.rs
@@ -47,3 +47,11 @@ pub unsafe fn rlct_clone_impl(stack: *mut usize) -> Result<FdGuard> {
 
     Ok(new_thr_fd)
 }
+
+pub fn exit_this_thread() -> ! {
+    let thread_fd = RtTcb::current().thread_fd();
+    // TODO: modify interface so it writes directly to the thread fd?
+    let status_fd = syscall::dup(**thread_fd, b"status").unwrap();
+    syscall::write(status_fd, &0_usize.to_ne_bytes()).unwrap();
+    unreachable!()
+}
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index 81b0d3345be93c18358071bddf6c67a97bce7e73..0729cc98583915220bcbe32522aed4e58037d7cd 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -1138,6 +1138,6 @@ impl Pal for Sys {
     }
 
     fn exit_thread() -> ! {
-        Self::exit(0)
+        redox_rt::thread::exit_this_thread()
     }
 }