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() } }