std: Make console log off/on controls work with newsched

This commit is contained in:
Brian Anderson
2013-06-21 16:52:07 -07:00
parent 1b7c99655f
commit 95eb01957b
5 changed files with 55 additions and 16 deletions

View File

@@ -11,14 +11,21 @@
//! Logging
use option::*;
use os;
use either::*;
use rt;
use rt::OldTaskContext;
use rt::logging::{Logger, StdErrLogger};
/// Turns on logging to stdout globally
pub fn console_on() {
if rt::context() == OldTaskContext {
unsafe {
rustrt::rust_log_console_on();
}
} else {
rt::logging::console_on();
}
}
/**
@@ -29,9 +36,18 @@ pub fn console_on() {
* the RUST_LOG environment variable
*/
pub fn console_off() {
// If RUST_LOG is set then the console can't be turned off
if os::getenv("RUST_LOG").is_some() {
return;
}
if rt::context() == OldTaskContext {
unsafe {
rustrt::rust_log_console_off();
}
} else {
rt::logging::console_off();
}
}
#[cfg(not(test))]

View File

@@ -9,6 +9,7 @@
// except according to those terms.
use either::*;
use libc;
pub trait Logger {
fn log(&mut self, msg: Either<~str, &'static str>);
@@ -20,6 +21,10 @@ impl Logger for StdErrLogger {
fn log(&mut self, msg: Either<~str, &'static str>) {
use io::{Writer, WriterUtil};
if !should_log_console() {
return;
}
let s: &str = match msg {
Left(ref s) => {
let s: &str = *s;
@@ -44,7 +49,6 @@ pub fn init(crate_map: *u8) {
use str;
use ptr;
use option::{Some, None};
use libc::c_char;
let log_spec = os::getenv("RUST_LOG");
match log_spec {
@@ -61,8 +65,16 @@ pub fn init(crate_map: *u8) {
}
}
}
extern {
fn rust_update_log_settings(crate_map: *u8, settings: *c_char);
}
}
pub fn console_on() { unsafe { rust_log_console_on() } }
pub fn console_off() { unsafe { rust_log_console_off() } }
fn should_log_console() -> bool { unsafe { rust_should_log_console() != 0 } }
extern {
fn rust_update_log_settings(crate_map: *u8, settings: *libc::c_char);
fn rust_log_console_on();
fn rust_log_console_off();
fn rust_should_log_console() -> libc::uintptr_t;
}

View File

@@ -591,12 +591,18 @@ rust_log_console_on() {
log_console_on();
}
extern void log_console_off(rust_env *env);
extern void log_console_off();
extern "C" CDECL void
rust_log_console_off() {
rust_task *task = rust_get_current_task();
log_console_off(task->kernel->env);
log_console_off();
}
extern bool should_log_console();
extern "C" CDECL uintptr_t
rust_should_log_console() {
return (uintptr_t)should_log_console();
}
extern "C" CDECL void

View File

@@ -43,11 +43,15 @@ log_console_on() {
* overridden by the environment.
*/
void
log_console_off(rust_env *env) {
log_console_off() {
scoped_lock with(_log_lock);
if (env->logspec == NULL) {
_log_to_console = false;
}
}
bool
should_log_console() {
scoped_lock with(_log_lock);
return _log_to_console;
}
rust_log::rust_log(rust_sched_loop *sched_loop) :

View File

@@ -37,6 +37,7 @@ rust_list_dir_wfd_size
rust_list_dir_wfd_fp_buf
rust_log_console_on
rust_log_console_off
rust_should_log_console
rust_set_environ
rust_unset_sigprocmask
rust_sched_current_nonlazy_threads