Stop logging task failure to task loggers
The isn't an ideal patch, and the comment why is in the code. Basically uvio uses task::unkillable which touches the kill flag for a task, and if the task is failing due to mismangement of the kill flag, then there will be serious problems when the task tries to print that it's failing.
This commit is contained in:
parent
61ed2cfb55
commit
e117aa0e2a
@ -546,7 +546,6 @@ pub fn begin_unwind(msg: *c_char, file: *c_char, line: size_t) -> ! {
|
||||
use rt::in_green_task_context;
|
||||
use rt::task::Task;
|
||||
use rt::local::Local;
|
||||
use rt::logging::Logger;
|
||||
use str::Str;
|
||||
use c_str::CString;
|
||||
use unstable::intrinsics;
|
||||
@ -573,16 +572,19 @@ pub fn begin_unwind(msg: *c_char, file: *c_char, line: size_t) -> ! {
|
||||
// have been failing due to a lack of memory in the first place...
|
||||
let task: *mut Task = Local::unsafe_borrow();
|
||||
let n = (*task).name.as_ref().map(|n| n.as_slice()).unwrap_or("<unnamed>");
|
||||
|
||||
// XXX: this should no get forcibly printed to the console, this should
|
||||
// either be sent to the parent task (ideally), or get printed to
|
||||
// the task's logger. Right now the logger is actually a uvio
|
||||
// instance, which uses unkillable blocks internally for various
|
||||
// reasons. This will cause serious trouble if the task is failing
|
||||
// due to mismanagment of its own kill flag, so calling our own
|
||||
// logger in its current state is a bit of a problem.
|
||||
match file.as_str() {
|
||||
Some(file) => {
|
||||
format_args!(|args| { (*task).logger.log(args) },
|
||||
"task '{}' failed at '{}', {}:{}",
|
||||
n, msg, file, line);
|
||||
}
|
||||
None => {
|
||||
format_args!(|args| { (*task).logger.log(args) },
|
||||
"task '{}' failed at '{}'", n, msg);
|
||||
rterrln!("task '{}' failed at '{}', {}:{}", n, msg, file, line);
|
||||
}
|
||||
None => rterrln!("task '{}' failed at '{}'", n, msg),
|
||||
}
|
||||
if (*task).unwinder.unwinding {
|
||||
rtabort!("unwinding again");
|
||||
|
@ -72,8 +72,8 @@ pub fn default_sched_threads() -> uint {
|
||||
pub fn dumb_println(args: &fmt::Arguments) {
|
||||
use rt::io::native::stdio::stderr;
|
||||
use rt::io::{Writer, io_error, ResourceUnavailable};
|
||||
let mut out = stderr();
|
||||
|
||||
let mut out = stderr();
|
||||
let mut again = true;
|
||||
do io_error::cond.trap(|e| {
|
||||
again = e.kind == ResourceUnavailable;
|
||||
|
Loading…
x
Reference in New Issue
Block a user