Skip to content

A few minor clean-ups to the rt code #8854

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 30, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/libextra/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,7 @@ fn get_concurrency() -> uint {
let opt_n: Option<uint> = FromStr::from_str(s);
match opt_n {
Some(n) if n > 0 => n,
_ => fail!("RUST_TEST_TASKS is `%s`, should be a non-negative integer.", s)
_ => fail!("RUST_TEST_TASKS is `%s`, should be a positive integer.", s)
}
}
None => {
Expand Down
9 changes: 4 additions & 5 deletions src/libstd/rt/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ pub fn clone() -> Option<~[~str]> {
mod imp {
use libc;
use option::{Option, Some, None};
use iterator::{Iterator, range};
use iterator::Iterator;
use str;
use unstable::finally::Finally;
use util;
use vec;

pub unsafe fn init(argc: int, argv: **u8) {
let args = load_argc_and_argv(argc, argv);
Expand Down Expand Up @@ -111,11 +112,9 @@ mod imp {

// Copied from `os`.
unsafe fn load_argc_and_argv(argc: int, argv: **u8) -> ~[~str] {
let mut args = ~[];
for i in range(0u, argc as uint) {
args.push(str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int)));
do vec::from_fn(argc as uint) |i| {
str::raw::from_c_str(*(argv as **libc::c_char).offset(i as int))
}
args
}

#[cfg(stage0)]
Expand Down
19 changes: 6 additions & 13 deletions src/libstd/rt/local_ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,27 +121,20 @@ pub unsafe fn borrow<T>(f: &fn(&mut T)) {
/// For the Scheduler pointer to be aliased
pub unsafe fn unsafe_borrow<T>() -> *mut T {
let key = tls_key();
let mut void_ptr: *mut c_void = tls::get(key);
let void_ptr = tls::get(key);
if void_ptr.is_null() {
rtabort!("thread-local pointer is null. bogus!");
}
let ptr: *mut *mut c_void = &mut void_ptr;
let ptr: *mut ~T = ptr as *mut ~T;
let ptr: *mut T = &mut **ptr;
return ptr;
void_ptr as *mut T
}

pub unsafe fn try_unsafe_borrow<T>() -> Option<*mut T> {
let key = tls_key();
let mut void_ptr: *mut c_void = tls::get(key);
let void_ptr = tls::get(key);
if void_ptr.is_null() {
return None;
}
{
let ptr: *mut *mut c_void = &mut void_ptr;
let ptr: *mut ~T = ptr as *mut ~T;
let ptr: *mut T = &mut **ptr;
return Some(ptr);
None
} else {
Some(void_ptr as *mut T)
}
}

Expand Down
18 changes: 7 additions & 11 deletions src/libstd/rt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ Several modules in `core` are clients of `rt`:
use cell::Cell;
use clone::Clone;
use container::Container;
use iterator::{Iterator, range};
use iterator::Iterator;
use option::{Option, None, Some};
use ptr::RawPtr;
use rt::local::Local;
Expand All @@ -71,7 +71,8 @@ use rt::work_queue::WorkQueue;
use rt::uv::uvio::UvEventLoop;
use unstable::atomics::{AtomicInt, SeqCst};
use unstable::sync::UnsafeArc;
use vec::{OwnedVector, MutableVector};
use vec;
use vec::{OwnedVector, MutableVector, ImmutableVector};

/// The global (exchange) heap.
pub mod global_heap;
Expand Down Expand Up @@ -251,25 +252,21 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {

// Create a work queue for each scheduler, ntimes. Create an extra
// for the main thread if that flag is set. We won't steal from it.
let mut work_queues = ~[];
for _ in range(0u, nscheds) {
let work_queue: WorkQueue<~Task> = WorkQueue::new();
work_queues.push(work_queue);
}
let work_queues: ~[WorkQueue<~Task>] = vec::from_fn(nscheds, |_| WorkQueue::new());

// The schedulers.
let mut scheds = ~[];
// Handles to the schedulers. When the main task ends these will be
// sent the Shutdown message to terminate the schedulers.
let mut handles = ~[];

for i in range(0u, nscheds) {
for work_queue in work_queues.iter() {
rtdebug!("inserting a regular scheduler");

// Every scheduler is driven by an I/O event loop.
let loop_ = ~UvEventLoop::new();
let mut sched = ~Scheduler::new(loop_,
work_queues[i].clone(),
work_queue.clone(),
work_queues.clone(),
sleepers.clone());
let handle = sched.make_handle();
Expand Down Expand Up @@ -358,9 +355,8 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {
}

// Run each remaining scheduler in a thread.
while !scheds.is_empty() {
for sched in scheds.move_rev_iter() {
rtdebug!("creating regular schedulers");
let sched = scheds.pop();
let sched_cell = Cell::new(sched);
let thread = do Thread::start {
let mut sched = sched_cell.take();
Expand Down
10 changes: 8 additions & 2 deletions src/libstd/rt/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use container::Container;
use from_str::FromStr;
use libc;
use option::{Some, None};
use option::{Some, None, Option};
use os;
use str::StrSlice;
use unstable::atomics::{AtomicInt, INIT_ATOMIC_INT, SeqCst};
Expand Down Expand Up @@ -57,7 +57,13 @@ pub fn limit_thread_creation_due_to_osx_and_valgrind() -> bool {
/// either `RUST_THREADS` or `num_cpus`.
pub fn default_sched_threads() -> uint {
match os::getenv("RUST_THREADS") {
Some(nstr) => FromStr::from_str(nstr).unwrap(),
Some(nstr) => {
let opt_n: Option<uint> = FromStr::from_str(nstr);
match opt_n {
Some(n) if n > 0 => n,
_ => rtabort!("`RUST_THREADS` is `%s`, should be a positive integer", nstr)
}
}
None => {
if limit_thread_creation_due_to_osx_and_valgrind() {
1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
// This checks that RUST_TEST_TASKS not being 1, 2, ... is detected
// properly.

// error-pattern:should be a non-negative integer
// error-pattern:should be a positive integer
// compile-flags: --test
// exec-env:RUST_TEST_TASKS=foo

Expand Down