@@ -15,14 +15,14 @@ use std::cast;
15
15
use std:: libc:: { c_int, c_char, c_void, c_uint} ;
16
16
use std:: libc;
17
17
use std:: rt:: BlockedTask ;
18
- use std:: rt:: io;
19
18
use std:: rt:: io:: { FileStat , IoError } ;
20
- use std:: rt:: rtio ;
19
+ use std:: rt:: io ;
21
20
use std:: rt:: local:: Local ;
21
+ use std:: rt:: rtio;
22
22
use std:: rt:: sched:: { Scheduler , SchedHandle } ;
23
23
use std:: vec;
24
24
25
- use super :: { Loop , UvError , uv_error_to_io_error} ;
25
+ use super :: { Loop , UvError , uv_error_to_io_error, wait_until_woken_after } ;
26
26
use uvio:: HomingIO ;
27
27
use uvll;
28
28
@@ -305,10 +305,8 @@ fn execute(f: &fn(*uvll::uv_fs_t, uvll::uv_fs_cb) -> c_int)
305
305
0 => {
306
306
req. fired = true ;
307
307
let mut slot = None ;
308
- unsafe { uvll:: set_data_for_req ( req. req , & slot) }
309
- let sched: ~Scheduler = Local :: take ( ) ;
310
- do sched. deschedule_running_task_and_then |_, task| {
311
- slot = Some ( task) ;
308
+ do wait_until_woken_after ( & mut slot) {
309
+ unsafe { uvll:: set_data_for_req ( req. req , & slot) }
312
310
}
313
311
match req. get_result ( ) {
314
312
n if n < 0 => Err ( UvError ( n) ) ,
@@ -454,123 +452,113 @@ mod test {
454
452
use std:: str;
455
453
use std:: vec;
456
454
use super :: * ;
457
- use super :: super :: { run_uv_loop } ;
455
+ use l = super :: super :: local_loop ;
458
456
459
457
#[ test]
460
458
fn file_test_full_simple_sync ( ) {
461
- do run_uv_loop |l| {
462
- let create_flags = O_RDWR | O_CREAT ;
463
- let read_flags = O_RDONLY ;
464
- let mode = S_IWUSR | S_IRUSR ;
465
- let path_str = "./tmp/file_full_simple_sync.txt" ;
466
-
467
- {
468
- // open/create
469
- let result = FsRequest :: open( l, & path_str. to_c_str( ) ,
470
- create_flags as int, mode as int) ;
471
- assert ! ( result. is_ok( ) ) ;
472
- let result = result. unwrap( ) ;
473
- let fd = result. fd;
474
-
475
- // write
476
- let result = FsRequest :: write( l, fd, "hello" . as_bytes( ) , -1 ) ;
477
- assert ! ( result. is_ok( ) ) ;
478
- }
459
+ let create_flags = O_RDWR | O_CREAT ;
460
+ let read_flags = O_RDONLY ;
461
+ let mode = S_IWUSR | S_IRUSR ;
462
+ let path_str = "./tmp/file_full_simple_sync.txt" ;
463
+
464
+ {
465
+ // open/create
466
+ let result = FsRequest :: open ( l ( ) , & path_str. to_c_str ( ) ,
467
+ create_flags as int , mode as int ) ;
468
+ assert ! ( result. is_ok( ) ) ;
469
+ let result = result. unwrap ( ) ;
470
+ let fd = result. fd ;
479
471
480
- {
481
- // re-open
482
- let result = FsRequest :: open( l, & path_str. to_c_str( ) ,
483
- read_flags as int, 0 ) ;
484
- assert ! ( result. is_ok( ) ) ;
485
- let result = result. unwrap( ) ;
486
- let fd = result. fd;
487
-
488
- // read
489
- let mut read_mem = vec:: from_elem( 1000 , 0u8 ) ;
490
- let result = FsRequest :: read( l, fd, read_mem, 0 ) ;
491
- assert ! ( result. is_ok( ) ) ;
492
-
493
- let nread = result. unwrap( ) ;
494
- assert ! ( nread > 0 ) ;
495
- let read_str = str:: from_utf8( read_mem. slice( 0 , nread as uint) ) ;
496
- assert_eq!( read_str, ~"hello");
497
- }
498
- // unlink
499
- let result = FsRequest::unlink(l, &path_str.to_c_str());
472
+ // write
473
+ let result = FsRequest :: write ( l ( ) , fd, "hello" . as_bytes ( ) , -1 ) ;
500
474
assert ! ( result. is_ok( ) ) ;
501
475
}
476
+
477
+ {
478
+ // re-open
479
+ let result = FsRequest :: open ( l ( ) , & path_str. to_c_str ( ) ,
480
+ read_flags as int , 0 ) ;
481
+ assert ! ( result. is_ok( ) ) ;
482
+ let result = result. unwrap ( ) ;
483
+ let fd = result. fd ;
484
+
485
+ // read
486
+ let mut read_mem = vec:: from_elem ( 1000 , 0u8 ) ;
487
+ let result = FsRequest :: read ( l ( ) , fd, read_mem, 0 ) ;
488
+ assert ! ( result. is_ok( ) ) ;
489
+
490
+ let nread = result. unwrap ( ) ;
491
+ assert ! ( nread > 0 ) ;
492
+ let read_str = str:: from_utf8 ( read_mem. slice ( 0 , nread as uint ) ) ;
493
+ assert_eq ! ( read_str, ~"hello");
494
+ }
495
+ // unlink
496
+ let result = FsRequest::unlink(l(), &path_str.to_c_str());
497
+ assert!(result.is_ok());
502
498
}
503
499
504
500
#[test]
505
501
fn file_test_stat() {
506
- do run_uv_loop |l| {
507
- let path = &" . /tmp/file_test_stat_simple".to_c_str();
508
- let create_flags = (O_RDWR | O_CREAT) as int;
509
- let mode = (S_IWUSR | S_IRUSR) as int;
502
+ let path = &" . /tmp/file_test_stat_simple".to_c_str();
503
+ let create_flags = (O_RDWR | O_CREAT) as int;
504
+ let mode = (S_IWUSR | S_IRUSR) as int;
510
505
511
- let result = FsRequest::open(l, path, create_flags, mode);
512
- assert!(result.is_ok());
513
- let file = result.unwrap();
506
+ let result = FsRequest::open(l() , path, create_flags, mode);
507
+ assert!(result.is_ok());
508
+ let file = result.unwrap();
514
509
515
- let result = FsRequest::write(l, file.fd, " hello".as_bytes(), 0);
516
- assert!(result.is_ok());
510
+ let result = FsRequest::write(l() , file.fd, " hello".as_bytes(), 0);
511
+ assert!(result.is_ok());
517
512
518
- let result = FsRequest::stat(l, path);
519
- assert!(result.is_ok());
520
- assert_eq!(result.unwrap().size, 5);
513
+ let result = FsRequest::stat(l() , path);
514
+ assert!(result.is_ok());
515
+ assert_eq!(result.unwrap().size, 5);
521
516
522
- fn free<T>(_: T) {}
523
- free(file);
517
+ fn free<T>(_: T) {}
518
+ free(file);
524
519
525
- let result = FsRequest::unlink(l, path);
526
- assert!(result.is_ok());
527
- }
520
+ let result = FsRequest::unlink(l(), path);
521
+ assert!(result.is_ok());
528
522
}
529
523
530
524
#[test]
531
525
fn file_test_mk_rm_dir() {
532
- do run_uv_loop |l| {
533
- let path = &" . /tmp/mk_rm_dir".to_c_str();
534
- let mode = S_IWUSR | S_IRUSR;
526
+ let path = &" . /tmp/mk_rm_dir".to_c_str();
527
+ let mode = S_IWUSR | S_IRUSR;
535
528
536
- let result = FsRequest::mkdir(l, path, mode);
537
- assert!(result.is_ok());
529
+ let result = FsRequest::mkdir(l() , path, mode);
530
+ assert!(result.is_ok());
538
531
539
- let result = FsRequest::stat(l, path);
540
- assert!(result.is_ok());
541
- assert!(result.unwrap().kind == io::TypeDirectory);
532
+ let result = FsRequest::stat(l() , path);
533
+ assert!(result.is_ok());
534
+ assert!(result.unwrap().kind == io::TypeDirectory);
542
535
543
- let result = FsRequest::rmdir(l, path);
544
- assert!(result.is_ok());
536
+ let result = FsRequest::rmdir(l() , path);
537
+ assert!(result.is_ok());
545
538
546
- let result = FsRequest::stat(l, path);
547
- assert!(result.is_err());
548
- }
539
+ let result = FsRequest::stat(l(), path);
540
+ assert!(result.is_err());
549
541
}
550
542
551
543
#[test]
552
544
fn file_test_mkdir_chokes_on_double_create() {
553
- do run_uv_loop |l| {
554
- let path = &" . /tmp/double_create_dir".to_c_str();
555
- let mode = S_IWUSR | S_IRUSR;
556
-
557
- let result = FsRequest::stat(l, path);
558
- assert!(result.is_err(), " { : ?} ", result);
559
- let result = FsRequest::mkdir(l, path, mode as c_int);
560
- assert!(result.is_ok(), " { : ?} ", result);
561
- let result = FsRequest::mkdir(l, path, mode as c_int);
562
- assert!(result.is_err(), " { : ?} ", result);
563
- let result = FsRequest::rmdir(l, path);
564
- assert!(result.is_ok(), " { : ?} ", result);
565
- }
545
+ let path = &" . /tmp/double_create_dir".to_c_str();
546
+ let mode = S_IWUSR | S_IRUSR;
547
+
548
+ let result = FsRequest::stat(l(), path);
549
+ assert!(result.is_err(), " { : ?} ", result);
550
+ let result = FsRequest::mkdir(l(), path, mode as c_int);
551
+ assert!(result.is_ok(), " { : ?} ", result);
552
+ let result = FsRequest::mkdir(l(), path, mode as c_int);
553
+ assert!(result.is_err(), " { : ?} ", result);
554
+ let result = FsRequest::rmdir(l(), path);
555
+ assert!(result.is_ok(), " { : ?} ", result);
566
556
}
567
557
568
558
#[test]
569
559
fn file_test_rmdir_chokes_on_nonexistant_path() {
570
- do run_uv_loop |l| {
571
- let path = &" . /tmp/never_existed_dir" . to_c_str( ) ;
572
- let result = FsRequest :: rmdir( l, path) ;
573
- assert!( result. is_err( ) ) ;
574
- }
560
+ let path = &" . /tmp/never_existed_dir" . to_c_str( ) ;
561
+ let result = FsRequest :: rmdir( l( ) , path) ;
562
+ assert!( result. is_err( ) ) ;
575
563
}
576
564
}
0 commit comments