diff --git a/src/libstd/rt/uv/file.rs b/src/libstd/rt/uv/file.rs index 637b5a75458..1a20ae82f17 100644 --- a/src/libstd/rt/uv/file.rs +++ b/src/libstd/rt/uv/file.rs @@ -37,7 +37,7 @@ impl FsRequest { fs_req } - fn open_common(loop_: Loop, path: &P, flags: int, mode: int, + fn open_common(loop_: &Loop, path: &P, flags: int, mode: int, cb: Option) -> int { let complete_cb_ptr = match cb { Some(_) => compl_cb as *u8, @@ -54,17 +54,17 @@ impl FsRequest { if is_sync { req.cleanup_and_delete(); } result } - pub fn open(loop_: Loop, path: &P, flags: int, mode: int, + pub fn open(loop_: &Loop, path: &P, flags: int, mode: int, cb: FsCallback) { FsRequest::open_common(loop_, path, flags, mode, Some(cb)); } - pub fn open_sync(loop_: Loop, path: &P, flags: int, mode: int) -> Result { + pub fn open_sync(loop_: &Loop, path: &P, flags: int, mode: int) -> Result { let result = FsRequest::open_common(loop_, path, flags, mode, None); - sync_cleanup(&loop_, result) + sync_cleanup(loop_, result) } - fn unlink_common(loop_: Loop, path: &P, cb: Option) -> int { + fn unlink_common(loop_: &Loop, path: &P, cb: Option) -> int { let complete_cb_ptr = match cb { Some(_) => compl_cb as *u8, None => 0 as *u8 @@ -80,13 +80,13 @@ impl FsRequest { if is_sync { req.cleanup_and_delete(); } result } - pub fn unlink(loop_: Loop, path: &P, cb: FsCallback) { + pub fn unlink(loop_: &Loop, path: &P, cb: FsCallback) { let result = FsRequest::unlink_common(loop_, path, Some(cb)); - sync_cleanup(&loop_, result); + sync_cleanup(loop_, result); } - pub fn unlink_sync(loop_: Loop, path: &P) -> Result { + pub fn unlink_sync(loop_: &Loop, path: &P) -> Result { let result = FsRequest::unlink_common(loop_, path, None); - sync_cleanup(&loop_, result) + sync_cleanup(loop_, result) } pub fn install_req_data(&self, cb: Option) { @@ -158,7 +158,7 @@ impl FileDescriptor { } // as per bnoordhuis in #libuv: offset >= 0 uses prwrite instead of write - fn write_common(&mut self, loop_: Loop, buf: Buf, offset: i64, cb: Option) + fn write_common(&mut self, loop_: &Loop, buf: Buf, offset: i64, cb: Option) -> int { let complete_cb_ptr = match cb { Some(_) => compl_cb as *u8, @@ -177,16 +177,16 @@ impl FileDescriptor { if is_sync { req.cleanup_and_delete(); } result } - pub fn write(&mut self, loop_: Loop, buf: Buf, offset: i64, cb: FsCallback) { + pub fn write(&mut self, loop_: &Loop, buf: Buf, offset: i64, cb: FsCallback) { self.write_common(loop_, buf, offset, Some(cb)); } - pub fn write_sync(&mut self, loop_: Loop, buf: Buf, offset: i64) + pub fn write_sync(&mut self, loop_: &Loop, buf: Buf, offset: i64) -> Result { let result = self.write_common(loop_, buf, offset, None); - sync_cleanup(&loop_, result) + sync_cleanup(loop_, result) } - fn read_common(&mut self, loop_: Loop, buf: Buf, + fn read_common(&mut self, loop_: &Loop, buf: Buf, offset: i64, cb: Option) -> int { let complete_cb_ptr = match cb { @@ -205,16 +205,16 @@ impl FileDescriptor { if is_sync { req.cleanup_and_delete(); } result } - pub fn read(&mut self, loop_: Loop, buf: Buf, offset: i64, cb: FsCallback) { + pub fn read(&mut self, loop_: &Loop, buf: Buf, offset: i64, cb: FsCallback) { self.read_common(loop_, buf, offset, Some(cb)); } - pub fn read_sync(&mut self, loop_: Loop, buf: Buf, offset: i64) + pub fn read_sync(&mut self, loop_: &Loop, buf: Buf, offset: i64) -> Result { let result = self.read_common(loop_, buf, offset, None); - sync_cleanup(&loop_, result) + sync_cleanup(loop_, result) } - fn close_common(self, loop_: Loop, cb: Option) -> int { + fn close_common(self, loop_: &Loop, cb: Option) -> int { let complete_cb_ptr = match cb { Some(_) => compl_cb as *u8, None => 0 as *u8 @@ -228,12 +228,12 @@ impl FileDescriptor { if is_sync { req.cleanup_and_delete(); } result } - pub fn close(self, loop_: Loop, cb: FsCallback) { + pub fn close(self, loop_: &Loop, cb: FsCallback) { self.close_common(loop_, Some(cb)); } - pub fn close_sync(self, loop_: Loop) -> Result { + pub fn close_sync(self, loop_: &Loop) -> Result { let result = self.close_common(loop_, None); - sync_cleanup(&loop_, result) + sync_cleanup(loop_, result) } } extern fn compl_cb(req: *uv_fs_t) { @@ -301,26 +301,25 @@ mod test { let read_buf = slice_to_uv_buf(read_mem); let read_buf_ptr: *Buf = &read_buf; let p = Path(path_str); - do FsRequest::open(loop_, &p, create_flags as int, mode as int) + do FsRequest::open(&loop_, &p, create_flags as int, mode as int) |req, uverr| { - let loop_ = req.get_loop(); assert!(uverr.is_none()); let mut fd = FileDescriptor::from_open_req(req); let raw_fd = fd.native_handle(); let buf = unsafe { *write_buf_ptr }; - do fd.write(loop_, buf, -1) |_, uverr| { + do fd.write(&req.get_loop(), buf, -1) |req, uverr| { let fd = FileDescriptor(raw_fd); - do fd.close(loop_) |req, _| { + do fd.close(&req.get_loop()) |req, _| { let loop_ = req.get_loop(); assert!(uverr.is_none()); - do FsRequest::open(loop_, &Path(path_str), read_flags as int,0) + do FsRequest::open(&loop_, &Path(path_str), read_flags as int,0) |req, uverr| { assert!(uverr.is_none()); let loop_ = req.get_loop(); let mut fd = FileDescriptor::from_open_req(req); let raw_fd = fd.native_handle(); let read_buf = unsafe { *read_buf_ptr }; - do fd.read(loop_, read_buf, 0) |req, uverr| { + do fd.read(&loop_, read_buf, 0) |req, uverr| { assert!(uverr.is_none()); let loop_ = req.get_loop(); // we know nread >=0 because uverr is none.. @@ -334,8 +333,9 @@ mod test { read_buf.base, nread)) }; assert!(read_str == ~"hello"); - do FileDescriptor(raw_fd).close(loop_) |_,uverr| { + do FileDescriptor(raw_fd).close(&loop_) |req,uverr| { assert!(uverr.is_none()); + let loop_ = &req.get_loop(); do FsRequest::unlink(loop_, &Path(path_str)) |_,uverr| { assert!(uverr.is_none()); @@ -367,18 +367,18 @@ mod test { let write_val = "hello".as_bytes().to_owned(); let write_buf = slice_to_uv_buf(write_val); // open/create - let result = FsRequest::open_sync(loop_, &Path(path_str), + let result = FsRequest::open_sync(&loop_, &Path(path_str), create_flags as int, mode as int); assert!(result.is_ok()); let mut fd = FileDescriptor(result.unwrap() as i32); // write - let result = fd.write_sync(loop_, write_buf, -1); + let result = fd.write_sync(&loop_, write_buf, -1); assert!(result.is_ok()); // close - let result = fd.close_sync(loop_); + let result = fd.close_sync(&loop_); assert!(result.is_ok()); // re-open - let result = FsRequest::open_sync(loop_, &Path(path_str), + let result = FsRequest::open_sync(&loop_, &Path(path_str), read_flags as int,0); assert!(result.is_ok()); let len = 1028; @@ -386,7 +386,7 @@ mod test { // read let read_mem: ~[u8] = vec::from_elem(len, 0u8); let buf = slice_to_uv_buf(read_mem); - let result = fd.read_sync(loop_, buf, 0); + let result = fd.read_sync(&loop_, buf, 0); assert!(result.is_ok()); let nread = result.unwrap(); // nread == 0 would be EOF.. we know it's >= zero because otherwise @@ -396,10 +396,10 @@ mod test { read_mem.slice(0, nread as uint)); assert!(read_str == ~"hello"); // close - let result = fd.close_sync(loop_); + let result = fd.close_sync(&loop_); assert!(result.is_ok()); // unlink - let result = FsRequest::unlink_sync(loop_, &Path(path_str)); + let result = FsRequest::unlink_sync(&loop_, &Path(path_str)); assert!(result.is_ok()); } else { fail!("nread was 0.. wudn't expectin' that."); } loop_.close(); @@ -416,7 +416,7 @@ mod test { file_test_full_simple_impl_sync(); } - fn naive_print(loop_: Loop, input: &str) { + fn naive_print(loop_: &Loop, input: &str) { let mut stdout = FileDescriptor(STDOUT_FILENO); let write_val = input.as_bytes(); let write_buf = slice_to_uv_buf(write_val); @@ -427,7 +427,7 @@ mod test { fn file_test_write_to_stdout() { do run_in_bare_thread { let mut loop_ = Loop::new(); - naive_print(loop_, "zanzibar!\n"); + naive_print(&loop_, "zanzibar!\n"); loop_.run(); loop_.close(); }; diff --git a/src/libstd/rt/uv/uvio.rs b/src/libstd/rt/uv/uvio.rs index acdd8b2dabf..63ff446ecf0 100644 --- a/src/libstd/rt/uv/uvio.rs +++ b/src/libstd/rt/uv/uvio.rs @@ -468,7 +468,6 @@ impl IoFactory for UvIoFactory { fn fs_open(&mut self, path: &P, flags: int, mode: int) -> Result<~RtioFileStream, IoError> { - let loop_ = Loop {handle: self.uv_loop().native_handle()}; let result_cell = Cell::new_empty(); let result_cell_ptr: *Cell> = &result_cell; @@ -477,8 +476,9 @@ impl IoFactory for UvIoFactory { do scheduler.deschedule_running_task_and_then |_, task| { let task_cell = Cell::new(task); let path = path_cell.take(); - do file::FsRequest::open(loop_, path, flags, mode) |req,err| { + do file::FsRequest::open(self.uv_loop(), path, flags, mode) |req,err| { if err.is_none() { + let loop_ = Loop {handle: req.get_loop().native_handle()}; let home = get_handle_to_current_scheduler!(); let fd = file::FileDescriptor(req.get_result()); let fs = ~UvFileStream::new( @@ -500,7 +500,6 @@ impl IoFactory for UvIoFactory { } fn fs_unlink(&mut self, path: &P) -> Result<(), IoError> { - let loop_ = Loop {handle: self.uv_loop().native_handle()}; let result_cell = Cell::new_empty(); let result_cell_ptr: *Cell> = &result_cell; let path_cell = Cell::new(path); @@ -508,7 +507,7 @@ impl IoFactory for UvIoFactory { do scheduler.deschedule_running_task_and_then |_, task| { let task_cell = Cell::new(task); let path = path_cell.take(); - do file::FsRequest::unlink(loop_, path) |_, err| { + do file::FsRequest::unlink(self.uv_loop(), path) |_, err| { let res = match err { None => Ok(()), Some(err) => Err(uv_error_to_io_error(err)) @@ -1088,7 +1087,7 @@ impl UvFileStream { do scheduler.deschedule_running_task_and_then |_, task| { let buf = unsafe { slice_to_uv_buf(*buf_ptr) }; let task_cell = Cell::new(task); - do self_.fd.read(self.loop_, buf, offset) |req, uverr| { + do self_.fd.read(&self_.loop_, buf, offset) |req, uverr| { let res = match uverr { None => Ok(req.get_result() as int), Some(err) => Err(uv_error_to_io_error(err)) @@ -1110,7 +1109,7 @@ impl UvFileStream { do scheduler.deschedule_running_task_and_then |_, task| { let buf = unsafe { slice_to_uv_buf(*buf_ptr) }; let task_cell = Cell::new(task); - do self_.fd.write(self.loop_, buf, offset) |_, uverr| { + do self_.fd.write(&self_.loop_, buf, offset) |_, uverr| { let res = match uverr { None => Ok(()), Some(err) => Err(uv_error_to_io_error(err)) @@ -1133,7 +1132,7 @@ impl Drop for UvFileStream { let scheduler = Local::take::(); do scheduler.deschedule_running_task_and_then |_, task| { let task_cell = Cell::new(task); - do self_.fd.close(self.loop_) |_,_| { + do self_.fd.close(&self.loop_) |_,_| { let scheduler = Local::take::(); scheduler.resume_blocked_task_immediately(task_cell.take()); };