Skip to content

Commit 5890fcf

Browse files
committed
auto merge of #8116 : toddaaro/rust/tls-tk-pr-pre, r=brson
Merged with task killing code this time around.
2 parents d346f1a + ce761f4 commit 5890fcf

File tree

17 files changed

+1135
-1134
lines changed

17 files changed

+1135
-1134
lines changed

src/libstd/macros.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ macro_rules! rtdebug_ (
2323
} )
2424
)
2525

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

3136
macro_rules! rtassert (

src/libstd/rt/comm.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use util::Void;
2424
use comm::{GenericChan, GenericSmartChan, GenericPort, Peekable};
2525
use cell::Cell;
2626
use clone::Clone;
27+
use rt::{context, SchedulerContext};
2728

2829
/// A combined refcount / BlockedTask-as-uint pointer.
2930
///
@@ -90,6 +91,9 @@ impl<T> ChanOne<T> {
9091
}
9192

9293
pub fn try_send(self, val: T) -> bool {
94+
95+
rtassert!(context() != SchedulerContext);
96+
9397
let mut this = self;
9498
let mut recvr_active = true;
9599
let packet = this.packet();
@@ -127,10 +131,7 @@ impl<T> ChanOne<T> {
127131
// Port is blocked. Wake it up.
128132
let recvr = BlockedTask::cast_from_uint(task_as_state);
129133
do recvr.wake().map_consume |woken_task| {
130-
let mut sched = Local::take::<Scheduler>();
131-
rtdebug!("rendezvous send");
132-
sched.metrics.rendezvous_sends += 1;
133-
sched.schedule_task(woken_task);
134+
Scheduler::run_task(woken_task);
134135
};
135136
}
136137
}
@@ -346,8 +347,7 @@ impl<T> Drop for ChanOne<T> {
346347
assert!((*this.packet()).payload.is_none());
347348
let recvr = BlockedTask::cast_from_uint(task_as_state);
348349
do recvr.wake().map_consume |woken_task| {
349-
let sched = Local::take::<Scheduler>();
350-
sched.schedule_task(woken_task);
350+
Scheduler::run_task(woken_task);
351351
};
352352
}
353353
}
@@ -743,7 +743,7 @@ mod test {
743743
do run_in_newsched_task {
744744
let (port, chan) = oneshot::<~int>();
745745
let port_cell = Cell::new(port);
746-
do spawntask_immediately {
746+
do spawntask {
747747
assert!(port_cell.take().recv() == ~10);
748748
}
749749

@@ -1019,5 +1019,4 @@ mod test {
10191019
}
10201020
}
10211021
}
1022-
10231022
}

src/libstd/rt/context.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,11 @@ impl Context {
4949
let argp: *c_void = unsafe { transmute::<&~fn(), *c_void>(&*start) };
5050
let sp: *uint = stack.end();
5151
let sp: *mut uint = unsafe { transmute_mut_unsafe(sp) };
52-
5352
// Save and then immediately load the current context,
5453
// which we will then modify to call the given function when restored
5554
let mut regs = new_regs();
5655
unsafe {
57-
swap_registers(transmute_mut_region(&mut *regs), transmute_region(&*regs))
56+
swap_registers(transmute_mut_region(&mut *regs), transmute_region(&*regs));
5857
};
5958

6059
initialize_call_frame(&mut *regs, fp, argp, sp);
@@ -72,13 +71,14 @@ impl Context {
7271
then loading the registers from a previously saved Context.
7372
*/
7473
pub fn swap(out_context: &mut Context, in_context: &Context) {
74+
rtdebug!("swapping contexts");
7575
let out_regs: &mut Registers = match out_context {
7676
&Context { regs: ~ref mut r, _ } => r
7777
};
7878
let in_regs: &Registers = match in_context {
7979
&Context { regs: ~ref r, _ } => r
8080
};
81-
81+
rtdebug!("doing raw swap");
8282
unsafe { swap_registers(out_regs, in_regs) };
8383
}
8484
}

src/libstd/rt/io/net/tcp.rs

+31-31
Original file line numberDiff line numberDiff line change
@@ -186,15 +186,15 @@ mod test {
186186
do run_in_newsched_task {
187187
let addr = next_test_ip4();
188188

189-
do spawntask_immediately {
189+
do spawntask {
190190
let mut listener = TcpListener::bind(addr);
191191
let mut stream = listener.accept();
192192
let mut buf = [0];
193193
stream.read(buf);
194194
assert!(buf[0] == 99);
195195
}
196196

197-
do spawntask_immediately {
197+
do spawntask {
198198
let mut stream = TcpStream::connect(addr);
199199
stream.write([99]);
200200
}
@@ -206,15 +206,15 @@ mod test {
206206
do run_in_newsched_task {
207207
let addr = next_test_ip6();
208208

209-
do spawntask_immediately {
209+
do spawntask {
210210
let mut listener = TcpListener::bind(addr);
211211
let mut stream = listener.accept();
212212
let mut buf = [0];
213213
stream.read(buf);
214214
assert!(buf[0] == 99);
215215
}
216216

217-
do spawntask_immediately {
217+
do spawntask {
218218
let mut stream = TcpStream::connect(addr);
219219
stream.write([99]);
220220
}
@@ -226,15 +226,15 @@ mod test {
226226
do run_in_newsched_task {
227227
let addr = next_test_ip4();
228228

229-
do spawntask_immediately {
229+
do spawntask {
230230
let mut listener = TcpListener::bind(addr);
231231
let mut stream = listener.accept();
232232
let mut buf = [0];
233233
let nread = stream.read(buf);
234234
assert!(nread.is_none());
235235
}
236236

237-
do spawntask_immediately {
237+
do spawntask {
238238
let _stream = TcpStream::connect(addr);
239239
// Close
240240
}
@@ -246,15 +246,15 @@ mod test {
246246
do run_in_newsched_task {
247247
let addr = next_test_ip6();
248248

249-
do spawntask_immediately {
249+
do spawntask {
250250
let mut listener = TcpListener::bind(addr);
251251
let mut stream = listener.accept();
252252
let mut buf = [0];
253253
let nread = stream.read(buf);
254254
assert!(nread.is_none());
255255
}
256256

257-
do spawntask_immediately {
257+
do spawntask {
258258
let _stream = TcpStream::connect(addr);
259259
// Close
260260
}
@@ -266,7 +266,7 @@ mod test {
266266
do run_in_newsched_task {
267267
let addr = next_test_ip4();
268268

269-
do spawntask_immediately {
269+
do spawntask {
270270
let mut listener = TcpListener::bind(addr);
271271
let mut stream = listener.accept();
272272
let mut buf = [0];
@@ -276,7 +276,7 @@ mod test {
276276
assert!(nread.is_none());
277277
}
278278

279-
do spawntask_immediately {
279+
do spawntask {
280280
let _stream = TcpStream::connect(addr);
281281
// Close
282282
}
@@ -288,7 +288,7 @@ mod test {
288288
do run_in_newsched_task {
289289
let addr = next_test_ip6();
290290

291-
do spawntask_immediately {
291+
do spawntask {
292292
let mut listener = TcpListener::bind(addr);
293293
let mut stream = listener.accept();
294294
let mut buf = [0];
@@ -298,7 +298,7 @@ mod test {
298298
assert!(nread.is_none());
299299
}
300300

301-
do spawntask_immediately {
301+
do spawntask {
302302
let _stream = TcpStream::connect(addr);
303303
// Close
304304
}
@@ -310,7 +310,7 @@ mod test {
310310
do run_in_newsched_task {
311311
let addr = next_test_ip4();
312312

313-
do spawntask_immediately {
313+
do spawntask {
314314
let mut listener = TcpListener::bind(addr);
315315
let mut stream = listener.accept();
316316
let buf = [0];
@@ -327,7 +327,7 @@ mod test {
327327
}
328328
}
329329

330-
do spawntask_immediately {
330+
do spawntask {
331331
let _stream = TcpStream::connect(addr);
332332
// Close
333333
}
@@ -339,7 +339,7 @@ mod test {
339339
do run_in_newsched_task {
340340
let addr = next_test_ip6();
341341

342-
do spawntask_immediately {
342+
do spawntask {
343343
let mut listener = TcpListener::bind(addr);
344344
let mut stream = listener.accept();
345345
let buf = [0];
@@ -356,7 +356,7 @@ mod test {
356356
}
357357
}
358358

359-
do spawntask_immediately {
359+
do spawntask {
360360
let _stream = TcpStream::connect(addr);
361361
// Close
362362
}
@@ -369,7 +369,7 @@ mod test {
369369
let addr = next_test_ip4();
370370
let max = 10;
371371

372-
do spawntask_immediately {
372+
do spawntask {
373373
let mut listener = TcpListener::bind(addr);
374374
do max.times {
375375
let mut stream = listener.accept();
@@ -379,7 +379,7 @@ mod test {
379379
}
380380
}
381381

382-
do spawntask_immediately {
382+
do spawntask {
383383
do max.times {
384384
let mut stream = TcpStream::connect(addr);
385385
stream.write([99]);
@@ -394,7 +394,7 @@ mod test {
394394
let addr = next_test_ip6();
395395
let max = 10;
396396

397-
do spawntask_immediately {
397+
do spawntask {
398398
let mut listener = TcpListener::bind(addr);
399399
do max.times {
400400
let mut stream = listener.accept();
@@ -404,7 +404,7 @@ mod test {
404404
}
405405
}
406406

407-
do spawntask_immediately {
407+
do spawntask {
408408
do max.times {
409409
let mut stream = TcpStream::connect(addr);
410410
stream.write([99]);
@@ -419,13 +419,13 @@ mod test {
419419
let addr = next_test_ip4();
420420
static MAX: int = 10;
421421

422-
do spawntask_immediately {
422+
do spawntask {
423423
let mut listener = TcpListener::bind(addr);
424424
for int::range(0, MAX) |i| {
425425
let stream = Cell::new(listener.accept());
426426
rtdebug!("accepted");
427427
// Start another task to handle the connection
428-
do spawntask_immediately {
428+
do spawntask {
429429
let mut stream = stream.take();
430430
let mut buf = [0];
431431
stream.read(buf);
@@ -440,7 +440,7 @@ mod test {
440440
fn connect(i: int, addr: IpAddr) {
441441
if i == MAX { return }
442442

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

461-
do spawntask_immediately {
461+
do spawntask {
462462
let mut listener = TcpListener::bind(addr);
463463
for int::range(0, MAX) |i| {
464464
let stream = Cell::new(listener.accept());
465465
rtdebug!("accepted");
466466
// Start another task to handle the connection
467-
do spawntask_immediately {
467+
do spawntask {
468468
let mut stream = stream.take();
469469
let mut buf = [0];
470470
stream.read(buf);
@@ -479,7 +479,7 @@ mod test {
479479
fn connect(i: int, addr: IpAddr) {
480480
if i == MAX { return }
481481

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

500-
do spawntask_immediately {
500+
do spawntask {
501501
let mut listener = TcpListener::bind(addr);
502502
for int::range(0, MAX) |_| {
503503
let stream = Cell::new(listener.accept());
@@ -535,7 +535,7 @@ mod test {
535535
let addr = next_test_ip6();
536536
static MAX: int = 10;
537537

538-
do spawntask_immediately {
538+
do spawntask {
539539
let mut listener = TcpListener::bind(addr);
540540
for int::range(0, MAX) |_| {
541541
let stream = Cell::new(listener.accept());
@@ -571,7 +571,7 @@ mod test {
571571
#[cfg(test)]
572572
fn socket_name(addr: IpAddr) {
573573
do run_in_newsched_task {
574-
do spawntask_immediately {
574+
do spawntask {
575575
let listener = TcpListener::bind(addr);
576576

577577
assert!(listener.is_some());
@@ -590,13 +590,13 @@ mod test {
590590
#[cfg(test)]
591591
fn peer_name(addr: IpAddr) {
592592
do run_in_newsched_task {
593-
do spawntask_immediately {
593+
do spawntask {
594594
let mut listener = TcpListener::bind(addr);
595595

596596
listener.accept();
597597
}
598598

599-
do spawntask_immediately {
599+
do spawntask {
600600
let stream = TcpStream::connect(addr);
601601

602602
assert!(stream.is_some());

0 commit comments

Comments
 (0)