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;
// 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");
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;