@@ -264,7 +264,7 @@ impl IoFactory for UvIoFactory {
264
264
fn udp_bind ( & mut self , addr : IpAddr ) -> Result < ~RtioUdpSocketObject , IoError > {
265
265
let /*mut*/ watcher = UdpWatcher :: new ( self . uv_loop ( ) ) ;
266
266
match watcher. bind ( addr) {
267
- Ok ( _) => Ok ( ~UvUdpSocket { watcher : watcher } ) ,
267
+ Ok ( _) => Ok ( ~UvUdpSocket ( watcher) ) ,
268
268
Err ( uverr) => {
269
269
let scheduler = Local :: take :: < Scheduler > ( ) ;
270
270
do scheduler. deschedule_running_task_and_then |_, task| {
@@ -451,22 +451,15 @@ impl RtioTcpStream for UvTcpStream {
451
451
}
452
452
}
453
453
454
- pub struct UvUdpSocket {
455
- watcher : UdpWatcher
456
- }
457
-
458
- impl UvUdpSocket {
459
- fn watcher ( & self ) -> UdpWatcher { self . watcher }
460
- }
454
+ pub struct UvUdpSocket ( UdpWatcher ) ;
461
455
462
456
impl Drop for UvUdpSocket {
463
457
fn finalize ( & self ) {
464
458
rtdebug ! ( "closing udp socket" ) ;
465
- let watcher = self . watcher ( ) ;
466
459
let scheduler = Local :: take :: < Scheduler > ( ) ;
467
460
do scheduler. deschedule_running_task_and_then |_, task| {
468
461
let task_cell = Cell :: new ( task) ;
469
- do watcher . close {
462
+ do self . close {
470
463
let scheduler = Local :: take :: < Scheduler > ( ) ;
471
464
scheduler. resume_task_immediately ( task_cell. take ( ) ) ;
472
465
}
@@ -481,14 +474,13 @@ impl RtioUdpSocket for UvUdpSocket {
481
474
482
475
let scheduler = Local :: take :: < Scheduler > ( ) ;
483
476
assert ! ( scheduler. in_task_context( ) ) ;
484
- let watcher = self . watcher ( ) ;
485
477
let buf_ptr: * & mut [ u8 ] = & buf;
486
478
do scheduler. deschedule_running_task_and_then |sched, task| {
487
479
rtdebug ! ( "recvfrom: entered scheduler context" ) ;
488
480
assert ! ( !sched. in_task_context( ) ) ;
489
481
let task_cell = Cell :: new ( task) ;
490
482
let alloc: AllocCallback = |_| unsafe { slice_to_uv_buf ( * buf_ptr) } ;
491
- do watcher . recv_start ( alloc) |watcher, nread, _buf, addr, flags, status| {
483
+ do self . recv_start ( alloc) |watcher, nread, _buf, addr, flags, status| {
492
484
let _ = flags; // NOTE add handling for partials?
493
485
494
486
watcher. recv_stop ( ) ;
@@ -517,12 +509,11 @@ impl RtioUdpSocket for UvUdpSocket {
517
509
let result_cell_ptr: * Cell < Result < ( ) , IoError > > = & result_cell;
518
510
let scheduler = Local :: take :: < Scheduler > ( ) ;
519
511
assert ! ( scheduler. in_task_context( ) ) ;
520
- let watcher = self . watcher ( ) ;
521
512
let buf_ptr: * & [ u8 ] = & buf;
522
513
do scheduler. deschedule_running_task_and_then |_, task| {
523
514
let task_cell = Cell :: new ( task) ;
524
515
let buf = unsafe { slice_to_uv_buf ( * buf_ptr) } ;
525
- do watcher . send ( buf, dst) |_watcher, status| {
516
+ do self . send ( buf, dst) |_watcher, status| {
526
517
527
518
let result = match status {
528
519
None => Ok ( ( ) ) ,
0 commit comments