Skip to content

Commit

Permalink
auto merge of #8116 : toddaaro/rust/tls-tk-pr-pre, r=brson
Browse files Browse the repository at this point in the history
Merged with task killing code this time around.
  • Loading branch information
bors committed Aug 2, 2013
2 parents d346f1a + ce761f4 commit 5890fcf
Show file tree
Hide file tree
Showing 17 changed files with 1,135 additions and 1,134 deletions.
9 changes: 7 additions & 2 deletions src/libstd/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ macro_rules! rtdebug_ (
} )
)

// An alternate version with no output, for turning off logging
// An alternate version with no output, for turning off logging. An
// earlier attempt that did not call the fmt! macro was insufficient,
// as a case of the "let bind each variable" approach eventually
// failed without an error message describing the invocation site.
macro_rules! rtdebug (
($( $arg:expr),+) => ( $(let _ = $arg)*; )
($( $arg:expr),+) => ( {
let _x = fmt!( $($arg),+ );
})
)

macro_rules! rtassert (
Expand Down
15 changes: 7 additions & 8 deletions src/libstd/rt/comm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ use util::Void;
use comm::{GenericChan, GenericSmartChan, GenericPort, Peekable};
use cell::Cell;
use clone::Clone;
use rt::{context, SchedulerContext};

/// A combined refcount / BlockedTask-as-uint pointer.
///
Expand Down Expand Up @@ -90,6 +91,9 @@ impl<T> ChanOne<T> {
}

pub fn try_send(self, val: T) -> bool {

rtassert!(context() != SchedulerContext);

let mut this = self;
let mut recvr_active = true;
let packet = this.packet();
Expand Down Expand Up @@ -127,10 +131,7 @@ impl<T> ChanOne<T> {
// Port is blocked. Wake it up.
let recvr = BlockedTask::cast_from_uint(task_as_state);
do recvr.wake().map_consume |woken_task| {
let mut sched = Local::take::<Scheduler>();
rtdebug!("rendezvous send");
sched.metrics.rendezvous_sends += 1;
sched.schedule_task(woken_task);
Scheduler::run_task(woken_task);
};
}
}
Expand Down Expand Up @@ -346,8 +347,7 @@ impl<T> Drop for ChanOne<T> {
assert!((*this.packet()).payload.is_none());
let recvr = BlockedTask::cast_from_uint(task_as_state);
do recvr.wake().map_consume |woken_task| {
let sched = Local::take::<Scheduler>();
sched.schedule_task(woken_task);
Scheduler::run_task(woken_task);
};
}
}
Expand Down Expand Up @@ -743,7 +743,7 @@ mod test {
do run_in_newsched_task {
let (port, chan) = oneshot::<~int>();
let port_cell = Cell::new(port);
do spawntask_immediately {
do spawntask {
assert!(port_cell.take().recv() == ~10);
}

Expand Down Expand Up @@ -1019,5 +1019,4 @@ mod test {
}
}
}

}
6 changes: 3 additions & 3 deletions src/libstd/rt/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,11 @@ impl Context {
let argp: *c_void = unsafe { transmute::<&~fn(), *c_void>(&*start) };
let sp: *uint = stack.end();
let sp: *mut uint = unsafe { transmute_mut_unsafe(sp) };

// Save and then immediately load the current context,
// which we will then modify to call the given function when restored
let mut regs = new_regs();
unsafe {
swap_registers(transmute_mut_region(&mut *regs), transmute_region(&*regs))
swap_registers(transmute_mut_region(&mut *regs), transmute_region(&*regs));
};

initialize_call_frame(&mut *regs, fp, argp, sp);
Expand All @@ -72,13 +71,14 @@ impl Context {
then loading the registers from a previously saved Context.
*/
pub fn swap(out_context: &mut Context, in_context: &Context) {
rtdebug!("swapping contexts");
let out_regs: &mut Registers = match out_context {
&Context { regs: ~ref mut r, _ } => r
};
let in_regs: &Registers = match in_context {
&Context { regs: ~ref r, _ } => r
};

rtdebug!("doing raw swap");
unsafe { swap_registers(out_regs, in_regs) };
}
}
Expand Down
62 changes: 31 additions & 31 deletions src/libstd/rt/io/net/tcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,15 +186,15 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip4();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
stream.read(buf);
assert!(buf[0] == 99);
}

do spawntask_immediately {
do spawntask {
let mut stream = TcpStream::connect(addr);
stream.write([99]);
}
Expand All @@ -206,15 +206,15 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip6();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
stream.read(buf);
assert!(buf[0] == 99);
}

do spawntask_immediately {
do spawntask {
let mut stream = TcpStream::connect(addr);
stream.write([99]);
}
Expand All @@ -226,15 +226,15 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip4();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
let nread = stream.read(buf);
assert!(nread.is_none());
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -246,15 +246,15 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip6();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
let nread = stream.read(buf);
assert!(nread.is_none());
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -266,7 +266,7 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip4();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
Expand All @@ -276,7 +276,7 @@ mod test {
assert!(nread.is_none());
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -288,7 +288,7 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip6();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let mut buf = [0];
Expand All @@ -298,7 +298,7 @@ mod test {
assert!(nread.is_none());
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -310,7 +310,7 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip4();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let buf = [0];
Expand All @@ -327,7 +327,7 @@ mod test {
}
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -339,7 +339,7 @@ mod test {
do run_in_newsched_task {
let addr = next_test_ip6();

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
let mut stream = listener.accept();
let buf = [0];
Expand All @@ -356,7 +356,7 @@ mod test {
}
}

do spawntask_immediately {
do spawntask {
let _stream = TcpStream::connect(addr);
// Close
}
Expand All @@ -369,7 +369,7 @@ mod test {
let addr = next_test_ip4();
let max = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
do max.times {
let mut stream = listener.accept();
Expand All @@ -379,7 +379,7 @@ mod test {
}
}

do spawntask_immediately {
do spawntask {
do max.times {
let mut stream = TcpStream::connect(addr);
stream.write([99]);
Expand All @@ -394,7 +394,7 @@ mod test {
let addr = next_test_ip6();
let max = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
do max.times {
let mut stream = listener.accept();
Expand All @@ -404,7 +404,7 @@ mod test {
}
}

do spawntask_immediately {
do spawntask {
do max.times {
let mut stream = TcpStream::connect(addr);
stream.write([99]);
Expand All @@ -419,13 +419,13 @@ mod test {
let addr = next_test_ip4();
static MAX: int = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
for int::range(0, MAX) |i| {
let stream = Cell::new(listener.accept());
rtdebug!("accepted");
// Start another task to handle the connection
do spawntask_immediately {
do spawntask {
let mut stream = stream.take();
let mut buf = [0];
stream.read(buf);
Expand All @@ -440,7 +440,7 @@ mod test {
fn connect(i: int, addr: IpAddr) {
if i == MAX { return }

do spawntask_immediately {
do spawntask {
rtdebug!("connecting");
let mut stream = TcpStream::connect(addr);
// Connect again before writing
Expand All @@ -458,13 +458,13 @@ mod test {
let addr = next_test_ip6();
static MAX: int = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
for int::range(0, MAX) |i| {
let stream = Cell::new(listener.accept());
rtdebug!("accepted");
// Start another task to handle the connection
do spawntask_immediately {
do spawntask {
let mut stream = stream.take();
let mut buf = [0];
stream.read(buf);
Expand All @@ -479,7 +479,7 @@ mod test {
fn connect(i: int, addr: IpAddr) {
if i == MAX { return }

do spawntask_immediately {
do spawntask {
rtdebug!("connecting");
let mut stream = TcpStream::connect(addr);
// Connect again before writing
Expand All @@ -497,7 +497,7 @@ mod test {
let addr = next_test_ip4();
static MAX: int = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
for int::range(0, MAX) |_| {
let stream = Cell::new(listener.accept());
Expand Down Expand Up @@ -535,7 +535,7 @@ mod test {
let addr = next_test_ip6();
static MAX: int = 10;

do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);
for int::range(0, MAX) |_| {
let stream = Cell::new(listener.accept());
Expand Down Expand Up @@ -571,7 +571,7 @@ mod test {
#[cfg(test)]
fn socket_name(addr: IpAddr) {
do run_in_newsched_task {
do spawntask_immediately {
do spawntask {
let listener = TcpListener::bind(addr);

assert!(listener.is_some());
Expand All @@ -590,13 +590,13 @@ mod test {
#[cfg(test)]
fn peer_name(addr: IpAddr) {
do run_in_newsched_task {
do spawntask_immediately {
do spawntask {
let mut listener = TcpListener::bind(addr);

listener.accept();
}

do spawntask_immediately {
do spawntask {
let stream = TcpStream::connect(addr);

assert!(stream.is_some());
Expand Down
Loading

0 comments on commit 5890fcf

Please sign in to comment.