about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-11-19 20:01:52 -0600
committerGitHub <noreply@github.com>2016-11-19 20:01:52 -0600
commit7c535c6ec688fba62ba50e4cd156b3ea8d01d57a (patch)
treee6260b549783ff034bc6f1b13d72033f39ff55f3 /src/libstd
parent0bd2ce62b27e2b9a7dfe92fc23d9098854008089 (diff)
parentfc0140d2714d06a45433bb747b4072cdc4665732 (diff)
downloadrust-7c535c6ec688fba62ba50e4cd156b3ea8d01d57a.tar.gz
rust-7c535c6ec688fba62ba50e4cd156b3ea8d01d57a.zip
Auto merge of #37833 - sfackler:process-abort, r=alexcrichton
Add std::process::abort

This calls libc abort on Unix and fastfail on Windows, first running
cleanups to do things like flush stdout buffers. This matches with libc
abort's behavior, which flushes open files.

r? @alexcrichton
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/process.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libstd/process.rs b/src/libstd/process.rs
index 9d21a76e81b..c99fda9febc 100644
--- a/src/libstd/process.rs
+++ b/src/libstd/process.rs
@@ -825,6 +825,21 @@ pub fn exit(code: i32) -> ! {
     ::sys::os::exit(code)
 }
 
+/// Terminates the process in an abnormal fashion.
+///
+/// The function will never return and will immediately terminate the current
+/// process in a platform specific "abnormal" manner.
+///
+/// Note that because this function never returns, and that it terminates the
+/// process, no destructors on the current stack or any other thread's stack
+/// will be run. If a clean shutdown is needed it is recommended to only call
+/// this function at a known point where there are no more destructors left
+/// to run.
+#[unstable(feature = "process_abort", issue = "37838")]
+pub fn abort() -> ! {
+    unsafe { ::sys::abort_internal() };
+}
+
 #[cfg(all(test, not(target_os = "emscripten")))]
 mod tests {
     use io::prelude::*;