@@ -72,6 +72,10 @@ bounded and unbounded protocols allows for less code duplication.
72
72
73
73
*/
74
74
75
+ // NB: transitionary, de-mode-ing.
76
+ #[ forbid( deprecated_mode) ] ;
77
+ #[ forbid( deprecated_pattern) ] ;
78
+
75
79
import unsafe:: { forget, reinterpret_cast, transmute} ;
76
80
import either:: { either, left, right} ;
77
81
import option:: unwrap;
@@ -143,15 +147,15 @@ struct packet_header {
143
147
// Returns the old state.
144
148
unsafe fn mark_blocked ( this : * rust_task ) -> state {
145
149
rustrt:: rust_task_ref ( this) ;
146
- let old_task = swap_task ( self . blocked_task , this) ;
150
+ let old_task = swap_task ( & mut self . blocked_task , this) ;
147
151
assert old_task. is_null ( ) ;
148
- swap_state_acq ( self . state , blocked)
152
+ swap_state_acq ( & mut self . state , blocked)
149
153
}
150
154
151
155
unsafe fn unblock ( ) {
152
- let old_task = swap_task ( self . blocked_task , ptr:: null ( ) ) ;
156
+ let old_task = swap_task ( & mut self . blocked_task , ptr:: null ( ) ) ;
153
157
if !old_task. is_null ( ) { rustrt:: rust_task_deref ( old_task) }
154
- match swap_state_acq ( self . state , empty) {
158
+ match swap_state_acq ( & mut self . state , empty) {
155
159
empty | blocked => ( ) ,
156
160
terminated => self . state = terminated,
157
161
full => self . state = full
@@ -224,7 +228,7 @@ fn packet<T: send>() -> *packet<T> {
224
228
225
229
#[ doc( hidden) ]
226
230
fn entangle_buffer < T : send , Tstart : send > (
227
- - buffer : ~buffer < T > ,
231
+ + buffer : ~buffer < T > ,
228
232
init : fn ( * libc:: c_void , x : & T ) -> * packet < Tstart > )
229
233
-> ( send_packet_buffered < Tstart , T > , recv_packet_buffered < Tstart , T > )
230
234
{
@@ -247,27 +251,27 @@ extern mod rusti {
247
251
// If I call the rusti versions directly from a polymorphic function,
248
252
// I get link errors. This is a bug that needs investigated more.
249
253
#[ doc( hidden) ]
250
- fn atomic_xchng_rel ( & dst: int , src : int ) -> int {
251
- rusti:: atomic_xchng_rel ( dst, src)
254
+ fn atomic_xchng_rel ( dst : & mut int , src : int ) -> int {
255
+ rusti:: atomic_xchng_rel ( * dst, src)
252
256
}
253
257
254
258
#[ doc( hidden) ]
255
- fn atomic_add_acq ( & dst: int , src : int ) -> int {
256
- rusti:: atomic_add_acq ( dst, src)
259
+ fn atomic_add_acq ( dst : & mut int , src : int ) -> int {
260
+ rusti:: atomic_add_acq ( * dst, src)
257
261
}
258
262
259
263
#[ doc( hidden) ]
260
- fn atomic_sub_rel ( & dst: int , src : int ) -> int {
261
- rusti:: atomic_sub_rel ( dst, src)
264
+ fn atomic_sub_rel ( dst : & mut int , src : int ) -> int {
265
+ rusti:: atomic_sub_rel ( * dst, src)
262
266
}
263
267
264
268
#[ doc( hidden) ]
265
- fn swap_task ( & dst: * rust_task , src : * rust_task ) -> * rust_task {
269
+ fn swap_task ( dst : & mut * rust_task , src : * rust_task ) -> * rust_task {
266
270
// It might be worth making both acquire and release versions of
267
271
// this.
268
272
unsafe {
269
273
reinterpret_cast ( rusti:: atomic_xchng (
270
- * ( ptr:: mut_addr_of ( dst) as * mut int ) ,
274
+ * ( ptr:: mut_addr_of ( * dst) as * mut int ) ,
271
275
src as int ) )
272
276
}
273
277
}
@@ -302,19 +306,19 @@ fn wait_event(this: *rust_task) -> *libc::c_void {
302
306
}
303
307
304
308
#[ doc( hidden) ]
305
- fn swap_state_acq ( & dst: state , src : state ) -> state {
309
+ fn swap_state_acq ( dst : & mut state , src : state ) -> state {
306
310
unsafe {
307
311
reinterpret_cast ( rusti:: atomic_xchng_acq (
308
- * ( ptr:: mut_addr_of ( dst) as * mut int ) ,
312
+ * ( ptr:: mut_addr_of ( * dst) as * mut int ) ,
309
313
src as int ) )
310
314
}
311
315
}
312
316
313
317
#[ doc( hidden) ]
314
- fn swap_state_rel ( & dst: state , src : state ) -> state {
318
+ fn swap_state_rel ( dst : & mut state , src : state ) -> state {
315
319
unsafe {
316
320
reinterpret_cast ( rusti:: atomic_xchng_rel (
317
- * ( ptr:: mut_addr_of ( dst) as * mut int ) ,
321
+ * ( ptr:: mut_addr_of ( * dst) as * mut int ) ,
318
322
src as int ) )
319
323
}
320
324
}
@@ -329,15 +333,15 @@ struct buffer_resource<T: send> {
329
333
new ( +b : ~buffer < T > ) {
330
334
//let p = ptr::addr_of(*b);
331
335
//error!{"take %?", p};
332
- atomic_add_acq ( b. header . ref_count , 1 ) ;
336
+ atomic_add_acq ( & mut b. header . ref_count , 1 ) ;
333
337
self . buffer = b;
334
338
}
335
339
336
340
drop unsafe {
337
341
let b = move_it ! { self . buffer} ;
338
342
//let p = ptr::addr_of(*b);
339
343
//error!{"drop %?", p};
340
- let old_count = atomic_sub_rel ( b. header . ref_count , 1 ) ;
344
+ let old_count = atomic_sub_rel ( & mut b. header . ref_count , 1 ) ;
341
345
//let old_count = atomic_xchng_rel(b.header.ref_count, 0);
342
346
if old_count == 1 {
343
347
// The new count is 0.
@@ -351,15 +355,15 @@ struct buffer_resource<T: send> {
351
355
}
352
356
353
357
#[ doc( hidden) ]
354
- fn send < T : send , Tbuffer : send > ( - p : send_packet_buffered < T , Tbuffer > ,
355
- - payload : T ) -> bool {
358
+ fn send < T : send , Tbuffer : send > ( + p : send_packet_buffered < T , Tbuffer > ,
359
+ + payload : T ) -> bool {
356
360
let header = p. header ( ) ;
357
361
let p_ = p. unwrap ( ) ;
358
362
let p = unsafe { & * p_ } ;
359
363
assert ptr:: addr_of ( p. header ) == header;
360
364
assert p. payload == none;
361
365
p. payload <- some ( payload) ;
362
- let old_state = swap_state_rel ( p. header . state , full) ;
366
+ let old_state = swap_state_rel ( & mut p. header . state , full) ;
363
367
match old_state {
364
368
empty => {
365
369
// Yay, fastpath.
@@ -371,7 +375,7 @@ fn send<T: send, Tbuffer: send>(-p: send_packet_buffered<T, Tbuffer>,
371
375
full => fail ~"duplicate send",
372
376
blocked => {
373
377
debug ! { "waking up task for %?" , p_} ;
374
- let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
378
+ let old_task = swap_task ( & mut p. header . blocked_task , ptr:: null ( ) ) ;
375
379
if !old_task. is_null ( ) {
376
380
rustrt:: task_signal_event (
377
381
old_task, ptr:: addr_of ( p. header ) as * libc:: c_void ) ;
@@ -395,7 +399,7 @@ fn send<T: send, Tbuffer: send>(-p: send_packet_buffered<T, Tbuffer>,
395
399
Fails if the sender closes the connection.
396
400
397
401
*/
398
- fn recv < T : send , Tbuffer : send > ( - p : recv_packet_buffered < T , Tbuffer > ) -> T {
402
+ fn recv < T : send , Tbuffer : send > ( + p : recv_packet_buffered < T , Tbuffer > ) -> T {
399
403
option:: unwrap_expect ( try_recv ( p) , "connection closed" )
400
404
}
401
405
@@ -405,7 +409,7 @@ Returns `none` if the sender has closed the connection without sending
405
409
a message, or `some(T)` if a message was received.
406
410
407
411
*/
408
- fn try_recv < T : send , Tbuffer : send > ( - p : recv_packet_buffered < T , Tbuffer > )
412
+ fn try_recv < T : send , Tbuffer : send > ( + p : recv_packet_buffered < T , Tbuffer > )
409
413
-> option < T >
410
414
{
411
415
let p_ = p. unwrap ( ) ;
@@ -417,7 +421,8 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>)
417
421
drop {
418
422
if task:: failing ( ) {
419
423
self . p . state = terminated;
420
- let old_task = swap_task ( self . p . blocked_task , ptr:: null ( ) ) ;
424
+ let old_task = swap_task ( & mut self . p . blocked_task ,
425
+ ptr:: null ( ) ) ;
421
426
if !old_task. is_null ( ) {
422
427
rustrt:: rust_task_deref ( old_task) ;
423
428
}
@@ -443,13 +448,13 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>)
443
448
let this = rustrt:: rust_get_task ( ) ;
444
449
rustrt:: task_clear_event_reject ( this) ;
445
450
rustrt:: rust_task_ref ( this) ;
446
- let old_task = swap_task ( p. header . blocked_task , this) ;
451
+ let old_task = swap_task ( & mut p. header . blocked_task , this) ;
447
452
assert old_task. is_null ( ) ;
448
453
let mut first = true ;
449
454
let mut count = SPIN_COUNT ;
450
455
loop {
451
456
rustrt:: task_clear_event_reject ( this) ;
452
- let old_state = swap_state_acq ( p. header . state ,
457
+ let old_state = swap_state_acq ( & mut p. header . state ,
453
458
blocked) ;
454
459
match old_state {
455
460
empty => {
@@ -474,7 +479,7 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>)
474
479
full => {
475
480
let mut payload = none;
476
481
payload <-> p. payload ;
477
- let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
482
+ let old_task = swap_task ( & mut p. header . blocked_task , ptr:: null ( ) ) ;
478
483
if !old_task. is_null ( ) {
479
484
rustrt:: rust_task_deref ( old_task) ;
480
485
}
@@ -486,7 +491,7 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>)
486
491
// casted too big of a number to a state.
487
492
assert old_state == terminated;
488
493
489
- let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
494
+ let old_task = swap_task ( & mut p. header . blocked_task , ptr:: null ( ) ) ;
490
495
if !old_task. is_null ( ) {
491
496
rustrt:: rust_task_deref ( old_task) ;
492
497
}
@@ -498,7 +503,7 @@ fn try_recv<T: send, Tbuffer: send>(-p: recv_packet_buffered<T, Tbuffer>)
498
503
}
499
504
500
505
/// Returns true if messages are available.
501
- pure fn peek < T : send , Tb : send > ( p : recv_packet_buffered < T , Tb > ) -> bool {
506
+ pure fn peek < T : send , Tb : send > ( p : & recv_packet_buffered < T , Tb > ) -> bool {
502
507
match unsafe { ( * p. header ( ) ) . state } {
503
508
empty => false ,
504
509
blocked => fail ~"peeking on blocked packet",
@@ -508,20 +513,20 @@ pure fn peek<T: send, Tb: send>(p: recv_packet_buffered<T, Tb>) -> bool {
508
513
509
514
impl < T : send , Tb : send > recv_packet_buffered < T , Tb > {
510
515
pure fn peek ( ) -> bool {
511
- peek ( self )
516
+ peek ( & self )
512
517
}
513
518
}
514
519
515
520
#[ doc( hidden) ]
516
521
fn sender_terminate < T : send > ( p : * packet < T > ) {
517
522
let p = unsafe { & * p } ;
518
- match swap_state_rel ( p. header . state , terminated) {
523
+ match swap_state_rel ( & mut p. header . state , terminated) {
519
524
empty => {
520
525
// The receiver will eventually clean up.
521
526
}
522
527
blocked => {
523
528
// wake up the target
524
- let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
529
+ let old_task = swap_task ( & mut p. header . blocked_task , ptr:: null ( ) ) ;
525
530
if !old_task. is_null ( ) {
526
531
rustrt:: task_signal_event (
527
532
old_task,
@@ -544,13 +549,13 @@ fn sender_terminate<T: send>(p: *packet<T>) {
544
549
#[ doc( hidden) ]
545
550
fn receiver_terminate < T : send > ( p : * packet < T > ) {
546
551
let p = unsafe { & * p } ;
547
- match swap_state_rel ( p. header . state , terminated) {
552
+ match swap_state_rel ( & mut p. header . state , terminated) {
548
553
empty => {
549
554
assert p. header . blocked_task . is_null ( ) ;
550
555
// the sender will clean up
551
556
}
552
557
blocked => {
553
- let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
558
+ let old_task = swap_task ( & mut p. header . blocked_task , ptr:: null ( ) ) ;
554
559
if !old_task. is_null ( ) {
555
560
rustrt:: rust_task_deref ( old_task) ;
556
561
assert old_task == rustrt:: rust_get_task ( ) ;
@@ -682,7 +687,7 @@ fn selecti<T: selectable>(endpoints: &[T]) -> uint {
682
687
}
683
688
684
689
/// Returns 0 or 1 depending on which endpoint is ready to receive
685
- fn select2i < A : selectable , B : selectable > ( a : A , b : B ) -> either < ( ) , ( ) > {
690
+ fn select2i < A : selectable , B : selectable > ( a : & A , b : & B ) -> either < ( ) , ( ) > {
686
691
match wait_many ( [ a. header ( ) , b. header ( ) ] /_) {
687
692
0 => left ( ( ) ) ,
688
693
1 => right ( ( ) ) ,
@@ -1004,7 +1009,7 @@ impl<T: send> port<T>: recv<T> {
1004
1009
let mut endp = none;
1005
1010
endp <-> self . endp ;
1006
1011
let peek = match endp {
1007
- some( endp) => pipes:: peek ( endp) ,
1012
+ some( endp) => pipes:: peek ( & endp) ,
1008
1013
none => fail ~"peeking empty stream"
1009
1014
} ;
1010
1015
self . endp <-> endp;
@@ -1122,7 +1127,7 @@ impl<T: send, U: send, Left: selectable recv<T>, Right: selectable recv<U>>
1122
1127
1123
1128
fn select ( ) -> either < T , U > {
1124
1129
match self {
1125
- ( lp, rp) => match select2i ( lp, rp) {
1130
+ ( lp, rp) => match select2i ( & lp, & rp) {
1126
1131
left( ( ) ) => left ( lp. recv ( ) ) ,
1127
1132
right( ( ) ) => right ( rp. recv ( ) )
1128
1133
}
@@ -1131,7 +1136,7 @@ impl<T: send, U: send, Left: selectable recv<T>, Right: selectable recv<U>>
1131
1136
1132
1137
fn try_select ( ) -> either < option < T > , option < U > > {
1133
1138
match self {
1134
- ( lp, rp) => match select2i ( lp, rp) {
1139
+ ( lp, rp) => match select2i ( & lp, & rp) {
1135
1140
left( ( ) ) => left ( lp. try_recv ( ) ) ,
1136
1141
right( ( ) ) => right ( rp. try_recv ( ) )
1137
1142
}
0 commit comments