Merge remote-tracking branch 'rust-lang/master' into iss29367-windows-docs
This commit is contained in:
@@ -19,7 +19,7 @@ use io;
|
||||
use libc;
|
||||
use str;
|
||||
use sync::atomic::{self, Ordering};
|
||||
use path::Path;
|
||||
use path::{self, Path};
|
||||
use sys::mutex::Mutex;
|
||||
use ptr;
|
||||
|
||||
@@ -93,87 +93,11 @@ fn _print(w: &mut Write, format: PrintFormat) -> io::Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn filter_frames(frames: &[Frame],
|
||||
format: PrintFormat,
|
||||
context: &BacktraceContext) -> (usize, usize)
|
||||
fn filter_frames(_frames: &[Frame],
|
||||
_format: PrintFormat,
|
||||
_context: &BacktraceContext) -> (usize, usize)
|
||||
{
|
||||
if format == PrintFormat::Full {
|
||||
return (0, 0);
|
||||
}
|
||||
|
||||
// We want to filter out frames with some prefixes
|
||||
// from both top and bottom of the call stack.
|
||||
static BAD_PREFIXES_TOP: &'static [&'static str] = &[
|
||||
"_ZN3std3sys3imp9backtrace",
|
||||
"ZN3std3sys3imp9backtrace",
|
||||
"std::sys::imp::backtrace",
|
||||
"_ZN3std10sys_common9backtrace",
|
||||
"ZN3std10sys_common9backtrace",
|
||||
"std::sys_common::backtrace",
|
||||
"_ZN3std9panicking",
|
||||
"ZN3std9panicking",
|
||||
"std::panicking",
|
||||
"_ZN4core9panicking",
|
||||
"ZN4core9panicking",
|
||||
"core::panicking",
|
||||
"_ZN4core6result13unwrap_failed",
|
||||
"ZN4core6result13unwrap_failed",
|
||||
"core::result::unwrap_failed",
|
||||
"rust_begin_unwind",
|
||||
"_ZN4drop",
|
||||
"mingw_set_invalid_parameter_handler",
|
||||
];
|
||||
static BAD_PREFIXES_BOTTOM: &'static [&'static str] = &[
|
||||
"_ZN3std9panicking",
|
||||
"ZN3std9panicking",
|
||||
"std::panicking",
|
||||
"_ZN3std5panic",
|
||||
"ZN3std5panic",
|
||||
"std::panic",
|
||||
"_ZN4core9panicking",
|
||||
"ZN4core9panicking",
|
||||
"core::panicking",
|
||||
"_ZN3std2rt10lang_start",
|
||||
"ZN3std2rt10lang_start",
|
||||
"std::rt::lang_start",
|
||||
"panic_unwind::__rust_maybe_catch_panic",
|
||||
"__rust_maybe_catch_panic",
|
||||
"_rust_maybe_catch_panic",
|
||||
"__libc_start_main",
|
||||
"__rust_try",
|
||||
"_start",
|
||||
"main",
|
||||
"BaseThreadInitThunk",
|
||||
"RtlInitializeExceptionChain",
|
||||
"__scrt_common_main_seh",
|
||||
"_ZN4drop",
|
||||
"mingw_set_invalid_parameter_handler",
|
||||
];
|
||||
|
||||
let is_good_frame = |frame: Frame, bad_prefixes: &[&str]| {
|
||||
resolve_symname(frame, |symname| {
|
||||
if let Some(mangled_symbol_name) = symname {
|
||||
if !bad_prefixes.iter().any(|s| mangled_symbol_name.starts_with(s)) {
|
||||
return Ok(())
|
||||
}
|
||||
}
|
||||
Err(io::Error::from(io::ErrorKind::Other))
|
||||
}, context).is_ok()
|
||||
};
|
||||
|
||||
let skipped_before = frames.iter().position(|frame| {
|
||||
is_good_frame(*frame, BAD_PREFIXES_TOP)
|
||||
}).unwrap_or(frames.len());
|
||||
let skipped_after = frames[skipped_before..].iter().rev().position(|frame| {
|
||||
is_good_frame(*frame, BAD_PREFIXES_BOTTOM)
|
||||
}).unwrap_or(frames.len() - skipped_before);
|
||||
|
||||
if skipped_before + skipped_after == frames.len() {
|
||||
// Avoid showing completely empty backtraces
|
||||
return (0, 0);
|
||||
}
|
||||
|
||||
(skipped_before, skipped_after)
|
||||
(0, 0)
|
||||
}
|
||||
|
||||
/// Controls how the backtrace should be formated.
|
||||
@@ -262,7 +186,7 @@ fn output_fileline(w: &mut Write, file: &[u8], line: libc::c_int,
|
||||
if let Ok(cwd) = env::current_dir() {
|
||||
if let Ok(stripped) = file_path.strip_prefix(&cwd) {
|
||||
if let Some(s) = stripped.to_str() {
|
||||
write!(w, " at ./{}:{}", s, line)?;
|
||||
write!(w, " at .{}{}:{}", path::MAIN_SEPARATOR, s, line)?;
|
||||
already_printed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,7 +339,7 @@ impl TcpListener {
|
||||
|
||||
// Bind our new socket
|
||||
let (addrp, len) = addr.into_inner();
|
||||
cvt(unsafe { c::bind(*sock.as_inner(), addrp, len) })?;
|
||||
cvt(unsafe { c::bind(*sock.as_inner(), addrp, len as _) })?;
|
||||
|
||||
// Start listening
|
||||
cvt(unsafe { c::listen(*sock.as_inner(), 128) })?;
|
||||
@@ -430,7 +430,7 @@ impl UdpSocket {
|
||||
|
||||
let sock = Socket::new(addr, c::SOCK_DGRAM)?;
|
||||
let (addrp, len) = addr.into_inner();
|
||||
cvt(unsafe { c::bind(*sock.as_inner(), addrp, len) })?;
|
||||
cvt(unsafe { c::bind(*sock.as_inner(), addrp, len as _) })?;
|
||||
Ok(UdpSocket { inner: sock })
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,9 @@ pub struct PoisonError<T> {
|
||||
}
|
||||
|
||||
/// An enumeration of possible errors which can occur while calling the
|
||||
/// `try_lock` method.
|
||||
/// [`try_lock`] method.
|
||||
///
|
||||
/// [`try_lock`]: struct.Mutex.html#method.try_lock
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub enum TryLockError<T> {
|
||||
/// The lock could not be acquired because another thread failed while holding
|
||||
|
||||
Reference in New Issue
Block a user