std: Make console log off/on controls work with newsched
This commit is contained in:
@@ -11,14 +11,21 @@
|
|||||||
//! Logging
|
//! Logging
|
||||||
|
|
||||||
use option::*;
|
use option::*;
|
||||||
|
use os;
|
||||||
use either::*;
|
use either::*;
|
||||||
|
use rt;
|
||||||
|
use rt::OldTaskContext;
|
||||||
use rt::logging::{Logger, StdErrLogger};
|
use rt::logging::{Logger, StdErrLogger};
|
||||||
|
|
||||||
/// Turns on logging to stdout globally
|
/// Turns on logging to stdout globally
|
||||||
pub fn console_on() {
|
pub fn console_on() {
|
||||||
|
if rt::context() == OldTaskContext {
|
||||||
unsafe {
|
unsafe {
|
||||||
rustrt::rust_log_console_on();
|
rustrt::rust_log_console_on();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
rt::logging::console_on();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,9 +36,18 @@ pub fn console_on() {
|
|||||||
* the RUST_LOG environment variable
|
* the RUST_LOG environment variable
|
||||||
*/
|
*/
|
||||||
pub fn console_off() {
|
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 {
|
unsafe {
|
||||||
rustrt::rust_log_console_off();
|
rustrt::rust_log_console_off();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
rt::logging::console_off();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use either::*;
|
use either::*;
|
||||||
|
use libc;
|
||||||
|
|
||||||
pub trait Logger {
|
pub trait Logger {
|
||||||
fn log(&mut self, msg: Either<~str, &'static str>);
|
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>) {
|
fn log(&mut self, msg: Either<~str, &'static str>) {
|
||||||
use io::{Writer, WriterUtil};
|
use io::{Writer, WriterUtil};
|
||||||
|
|
||||||
|
if !should_log_console() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let s: &str = match msg {
|
let s: &str = match msg {
|
||||||
Left(ref s) => {
|
Left(ref s) => {
|
||||||
let s: &str = *s;
|
let s: &str = *s;
|
||||||
@@ -44,7 +49,6 @@ pub fn init(crate_map: *u8) {
|
|||||||
use str;
|
use str;
|
||||||
use ptr;
|
use ptr;
|
||||||
use option::{Some, None};
|
use option::{Some, None};
|
||||||
use libc::c_char;
|
|
||||||
|
|
||||||
let log_spec = os::getenv("RUST_LOG");
|
let log_spec = os::getenv("RUST_LOG");
|
||||||
match log_spec {
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -591,12 +591,18 @@ rust_log_console_on() {
|
|||||||
log_console_on();
|
log_console_on();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void log_console_off(rust_env *env);
|
extern void log_console_off();
|
||||||
|
|
||||||
extern "C" CDECL void
|
extern "C" CDECL void
|
||||||
rust_log_console_off() {
|
rust_log_console_off() {
|
||||||
rust_task *task = rust_get_current_task();
|
log_console_off();
|
||||||
log_console_off(task->kernel->env);
|
}
|
||||||
|
|
||||||
|
extern bool should_log_console();
|
||||||
|
|
||||||
|
extern "C" CDECL uintptr_t
|
||||||
|
rust_should_log_console() {
|
||||||
|
return (uintptr_t)should_log_console();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" CDECL void
|
extern "C" CDECL void
|
||||||
|
|||||||
@@ -43,11 +43,15 @@ log_console_on() {
|
|||||||
* overridden by the environment.
|
* overridden by the environment.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
log_console_off(rust_env *env) {
|
log_console_off() {
|
||||||
scoped_lock with(_log_lock);
|
scoped_lock with(_log_lock);
|
||||||
if (env->logspec == NULL) {
|
|
||||||
_log_to_console = false;
|
_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) :
|
rust_log::rust_log(rust_sched_loop *sched_loop) :
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ rust_list_dir_wfd_size
|
|||||||
rust_list_dir_wfd_fp_buf
|
rust_list_dir_wfd_fp_buf
|
||||||
rust_log_console_on
|
rust_log_console_on
|
||||||
rust_log_console_off
|
rust_log_console_off
|
||||||
|
rust_should_log_console
|
||||||
rust_set_environ
|
rust_set_environ
|
||||||
rust_unset_sigprocmask
|
rust_unset_sigprocmask
|
||||||
rust_sched_current_nonlazy_threads
|
rust_sched_current_nonlazy_threads
|
||||||
|
|||||||
Reference in New Issue
Block a user