Skip to content

Commit 21e2740

Browse files
abrownalexcrichton
andcommitted
review: back out no-longer-needed changes from #5326
Co-authored-by: Alex Crichton <[email protected]>
1 parent 085aabc commit 21e2740

File tree

5 files changed

+74
-110
lines changed

5 files changed

+74
-110
lines changed

crates/wasi-common/cap-std-sync/src/file.rs

Lines changed: 53 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use is_terminal::IsTerminal;
55
use std::any::Any;
66
use std::convert::TryInto;
77
use std::io;
8-
use std::sync::{Arc, RwLock, RwLockReadGuard};
98
use system_interface::{
109
fs::{FileIoExt, GetSetFdFlags},
1110
io::{IoExt, ReadReady},
@@ -15,48 +14,11 @@ use wasi_common::{
1514
Error, ErrorExt,
1615
};
1716

18-
#[cfg(unix)]
19-
use io_lifetimes::{AsFd, BorrowedFd};
20-
21-
#[cfg(windows)]
22-
use io_lifetimes::{AsHandle, BorrowedHandle};
23-
24-
#[cfg(windows)]
25-
use io_extras::os::windows::{AsRawHandleOrSocket, RawHandleOrSocket};
26-
27-
pub struct BorrowedFile<'a>(RwLockReadGuard<'a, cap_std::fs::File>);
28-
29-
#[cfg(unix)]
30-
impl AsFd for BorrowedFile<'_> {
31-
fn as_fd(&self) -> BorrowedFd<'_> {
32-
self.0.as_fd()
33-
}
34-
}
35-
36-
#[cfg(windows)]
37-
impl AsHandle for BorrowedFile<'_> {
38-
fn as_handle(&self) -> BorrowedHandle<'_> {
39-
self.0.as_handle()
40-
}
41-
}
42-
43-
#[cfg(windows)]
44-
impl AsRawHandleOrSocket for BorrowedFile<'_> {
45-
#[inline]
46-
fn as_raw_handle_or_socket(&self) -> RawHandleOrSocket {
47-
self.0.as_raw_handle_or_socket()
48-
}
49-
}
50-
51-
pub struct File(RwLock<cap_std::fs::File>);
17+
pub struct File(cap_std::fs::File);
5218

5319
impl File {
5420
pub fn from_cap_std(file: cap_std::fs::File) -> Self {
55-
File(RwLock::new(file))
56-
}
57-
58-
pub fn borrow(&self) -> BorrowedFile {
59-
BorrowedFile(self.0.read().unwrap())
21+
File(file)
6022
}
6123
}
6224

@@ -65,32 +27,28 @@ impl WasiFile for File {
6527
fn as_any(&self) -> &dyn Any {
6628
self
6729
}
68-
6930
#[cfg(unix)]
70-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
71-
Some(Arc::new(self.borrow()))
31+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
32+
Some(self.0.as_fd())
7233
}
73-
7434
#[cfg(windows)]
75-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
76-
Some(Arc::new(BorrowedFile(self.0.read().unwrap())))
35+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
36+
Some(self.0.as_raw_handle_or_socket())
7737
}
78-
7938
async fn datasync(&self) -> Result<(), Error> {
80-
self.0.read().unwrap().sync_data()?;
39+
self.0.sync_data()?;
8140
Ok(())
8241
}
8342
async fn sync(&self) -> Result<(), Error> {
84-
self.0.read().unwrap().sync_all()?;
43+
self.0.sync_all()?;
8544
Ok(())
8645
}
8746
async fn get_filetype(&self) -> Result<FileType, Error> {
88-
let meta = self.0.read().unwrap().metadata()?;
47+
let meta = self.0.metadata()?;
8948
Ok(filetype_from(&meta.file_type()))
9049
}
9150
async fn get_fdflags(&self) -> Result<FdFlags, Error> {
92-
let file = self.0.read().unwrap();
93-
let fdflags = get_fd_flags(&*file)?;
51+
let fdflags = get_fd_flags(&self.0)?;
9452
Ok(fdflags)
9553
}
9654
async fn set_fdflags(&mut self, fdflags: FdFlags) -> Result<(), Error> {
@@ -101,13 +59,12 @@ impl WasiFile for File {
10159
) {
10260
return Err(Error::invalid_argument().context("cannot set DSYNC, SYNC, or RSYNC flag"));
10361
}
104-
let file = self.0.get_mut().unwrap();
105-
let set_fd_flags = (*file).new_set_fd_flags(to_sysif_fdflags(fdflags))?;
106-
(*file).set_fd_flags(set_fd_flags)?;
62+
let set_fd_flags = self.0.new_set_fd_flags(to_sysif_fdflags(fdflags))?;
63+
self.0.set_fd_flags(set_fd_flags)?;
10764
Ok(())
10865
}
10966
async fn get_filestat(&self) -> Result<Filestat, Error> {
110-
let meta = self.0.read().unwrap().metadata()?;
67+
let meta = self.0.metadata()?;
11168
Ok(Filestat {
11269
device_id: meta.dev(),
11370
inode: meta.ino(),
@@ -120,18 +77,15 @@ impl WasiFile for File {
12077
})
12178
}
12279
async fn set_filestat_size(&self, size: u64) -> Result<(), Error> {
123-
self.0.read().unwrap().set_len(size)?;
80+
self.0.set_len(size)?;
12481
Ok(())
12582
}
12683
async fn advise(&self, offset: u64, len: u64, advice: Advice) -> Result<(), Error> {
127-
self.0
128-
.read()
129-
.unwrap()
130-
.advise(offset, len, convert_advice(advice))?;
84+
self.0.advise(offset, len, convert_advice(advice))?;
13185
Ok(())
13286
}
13387
async fn allocate(&self, offset: u64, len: u64) -> Result<(), Error> {
134-
self.0.read().unwrap().allocate(offset, len)?;
88+
self.0.allocate(offset, len)?;
13589
Ok(())
13690
}
13791
async fn set_times(
@@ -140,47 +94,45 @@ impl WasiFile for File {
14094
mtime: Option<wasi_common::SystemTimeSpec>,
14195
) -> Result<(), Error> {
14296
self.0
143-
.read()
144-
.unwrap()
14597
.set_times(convert_systimespec(atime), convert_systimespec(mtime))?;
14698
Ok(())
14799
}
148100
async fn read_vectored<'a>(&self, bufs: &mut [io::IoSliceMut<'a>]) -> Result<u64, Error> {
149-
let n = self.0.read().unwrap().read_vectored(bufs)?;
101+
let n = self.0.read_vectored(bufs)?;
150102
Ok(n.try_into()?)
151103
}
152104
async fn read_vectored_at<'a>(
153105
&self,
154106
bufs: &mut [io::IoSliceMut<'a>],
155107
offset: u64,
156108
) -> Result<u64, Error> {
157-
let n = self.0.read().unwrap().read_vectored_at(bufs, offset)?;
109+
let n = self.0.read_vectored_at(bufs, offset)?;
158110
Ok(n.try_into()?)
159111
}
160112
async fn write_vectored<'a>(&self, bufs: &[io::IoSlice<'a>]) -> Result<u64, Error> {
161-
let n = self.0.read().unwrap().write_vectored(bufs)?;
113+
let n = self.0.write_vectored(bufs)?;
162114
Ok(n.try_into()?)
163115
}
164116
async fn write_vectored_at<'a>(
165117
&self,
166118
bufs: &[io::IoSlice<'a>],
167119
offset: u64,
168120
) -> Result<u64, Error> {
169-
let n = self.0.read().unwrap().write_vectored_at(bufs, offset)?;
121+
let n = self.0.write_vectored_at(bufs, offset)?;
170122
Ok(n.try_into()?)
171123
}
172124
async fn seek(&self, pos: std::io::SeekFrom) -> Result<u64, Error> {
173-
Ok(self.0.read().unwrap().seek(pos)?)
125+
Ok(self.0.seek(pos)?)
174126
}
175127
async fn peek(&self, buf: &mut [u8]) -> Result<u64, Error> {
176-
let n = self.0.read().unwrap().peek(buf)?;
128+
let n = self.0.peek(buf)?;
177129
Ok(n.try_into()?)
178130
}
179131
fn num_ready_bytes(&self) -> Result<u64, Error> {
180-
Ok(self.0.read().unwrap().num_ready_bytes()?)
132+
Ok(self.0.num_ready_bytes()?)
181133
}
182134
fn isatty(&self) -> bool {
183-
self.0.read().unwrap().is_terminal()
135+
self.0.is_terminal()
184136
}
185137
}
186138

@@ -207,6 +159,35 @@ pub fn filetype_from(ft: &cap_std::fs::FileType) -> FileType {
207159
}
208160
}
209161

162+
#[cfg(windows)]
163+
use io_lifetimes::{AsHandle, BorrowedHandle};
164+
#[cfg(windows)]
165+
impl AsHandle for File {
166+
fn as_handle(&self) -> BorrowedHandle<'_> {
167+
self.0.as_handle()
168+
}
169+
}
170+
171+
#[cfg(windows)]
172+
use io_extras::os::windows::{AsRawHandleOrSocket, RawHandleOrSocket};
173+
#[cfg(windows)]
174+
impl AsRawHandleOrSocket for File {
175+
#[inline]
176+
fn as_raw_handle_or_socket(&self) -> RawHandleOrSocket {
177+
self.0.as_raw_handle_or_socket()
178+
}
179+
}
180+
181+
#[cfg(unix)]
182+
use io_lifetimes::{AsFd, BorrowedFd};
183+
184+
#[cfg(unix)]
185+
impl AsFd for File {
186+
fn as_fd(&self) -> BorrowedFd<'_> {
187+
self.0.as_fd()
188+
}
189+
}
190+
210191
pub(crate) fn convert_systimespec(
211192
t: Option<wasi_common::SystemTimeSpec>,
212193
) -> Option<SystemTimeSpec> {

crates/wasi-common/cap-std-sync/src/net.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use io_lifetimes::{AsSocket, BorrowedSocket};
88
use std::any::Any;
99
use std::convert::TryInto;
1010
use std::io;
11-
use std::sync::Arc;
1211
#[cfg(unix)]
1312
use system_interface::fs::GetSetFdFlags;
1413
use system_interface::io::IoExt;
@@ -19,11 +18,6 @@ use wasi_common::{
1918
Error, ErrorExt,
2019
};
2120

22-
#[cfg(unix)]
23-
use wasi_common::file::BorrowedAsFd;
24-
#[cfg(windows)]
25-
use wasi_common::file::BorrowedAsRawHandleOrSocket;
26-
2721
pub enum Socket {
2822
TcpListener(cap_std::net::TcpListener),
2923
TcpStream(cap_std::net::TcpStream),
@@ -89,12 +83,12 @@ macro_rules! wasi_listen_write_impl {
8983
self
9084
}
9185
#[cfg(unix)]
92-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
93-
Some(Arc::new(BorrowedAsFd::new(&self.0)))
86+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
87+
Some(self.0.as_fd())
9488
}
9589
#[cfg(windows)]
96-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
97-
Some(Arc::new(BorrowedAsRawHandleOrSocket::new(&self.0)))
90+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
91+
Some(self.0.as_raw_handle_or_socket())
9892
}
9993
async fn sock_accept(&self, fdflags: FdFlags) -> Result<Box<dyn WasiFile>, Error> {
10094
let (stream, _) = self.0.accept()?;
@@ -182,12 +176,12 @@ macro_rules! wasi_stream_write_impl {
182176
self
183177
}
184178
#[cfg(unix)]
185-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
186-
Some(Arc::new(BorrowedAsFd::new(&self.0)))
179+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
180+
Some(self.0.as_fd())
187181
}
188182
#[cfg(windows)]
189-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
190-
Some(Arc::new(BorrowedAsRawHandleOrSocket::new(&self.0)))
183+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
184+
Some(self.0.as_raw_handle_or_socket())
191185
}
192186
async fn get_filetype(&self) -> Result<FileType, Error> {
193187
Ok(FileType::SocketStream)

crates/wasi-common/cap-std-sync/src/sched/unix.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,28 @@ pub async fn poll_oneoff<'a>(poll: &mut Poll<'a>) -> Result<(), Error> {
88
if poll.is_empty() {
99
return Ok(());
1010
}
11-
let mut poll_as_fds = Vec::new();
11+
let mut pollfds = Vec::new();
1212
for s in poll.rw_subscriptions() {
1313
match s {
1414
Subscription::Read(f) => {
1515
let fd = f
1616
.file
1717
.pollable()
1818
.ok_or(Error::invalid_argument().context("file is not pollable"))?;
19-
poll_as_fds.push((fd, PollFlags::IN));
19+
pollfds.push(PollFd::from_borrowed_fd(fd, PollFlags::IN));
2020
}
2121

2222
Subscription::Write(f) => {
2323
let fd = f
2424
.file
2525
.pollable()
2626
.ok_or(Error::invalid_argument().context("file is not pollable"))?;
27-
poll_as_fds.push((fd, PollFlags::OUT));
27+
pollfds.push(PollFd::from_borrowed_fd(fd, PollFlags::OUT));
2828
}
2929
Subscription::MonotonicClock { .. } => unreachable!(),
3030
}
3131
}
3232

33-
let mut pollfds = poll_as_fds
34-
.iter()
35-
.map(|(fd, events)| PollFd::from_borrowed_fd(fd.as_fd(), events.clone()))
36-
.collect::<Vec<_>>();
37-
3833
let ready = loop {
3934
let poll_timeout = if let Some(t) = poll.earliest_clock_deadline() {
4035
let duration = t.duration_until().unwrap_or(Duration::from_secs(0));

crates/wasi-common/cap-std-sync/src/stdio.rs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,8 @@ use std::convert::TryInto;
77
use std::fs::File;
88
use std::io;
99
use std::io::{Read, Write};
10-
use std::sync::Arc;
1110
use system_interface::io::ReadReady;
1211

13-
#[cfg(unix)]
14-
use wasi_common::file::BorrowedAsFd;
15-
#[cfg(windows)]
16-
use wasi_common::file::BorrowedAsRawHandleOrSocket;
17-
1812
#[cfg(windows)]
1913
use io_extras::os::windows::{AsRawHandleOrSocket, RawHandleOrSocket};
2014
#[cfg(unix)]
@@ -39,13 +33,13 @@ impl WasiFile for Stdin {
3933
}
4034

4135
#[cfg(unix)]
42-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
43-
Some(Arc::new(BorrowedAsFd::new(&self.0)))
36+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
37+
Some(self.0.as_fd())
4438
}
4539

4640
#[cfg(windows)]
47-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
48-
Some(Arc::new(BorrowedAsRawHandleOrSocket::new(&self.0)))
41+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
42+
Some(self.0.as_raw_handle_or_socket())
4943
}
5044

5145
async fn get_filetype(&self) -> Result<FileType, Error> {
@@ -116,12 +110,12 @@ macro_rules! wasi_file_write_impl {
116110
self
117111
}
118112
#[cfg(unix)]
119-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
120-
Some(Arc::new(BorrowedAsFd::new(&self.0)))
113+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
114+
Some(self.0.as_fd())
121115
}
122116
#[cfg(windows)]
123-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
124-
Some(Arc::new(BorrowedAsRawHandleOrSocket::new(&self.0)))
117+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
118+
Some(self.0.as_raw_handle_or_socket())
125119
}
126120
async fn get_filetype(&self) -> Result<FileType, Error> {
127121
if self.isatty() {

crates/wasi-common/src/file.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ pub trait WasiFile: Send + Sync {
1515
async fn get_filetype(&self) -> Result<FileType, Error>;
1616

1717
#[cfg(unix)]
18-
fn pollable(&self) -> Option<Arc<dyn AsFd + '_>> {
18+
fn pollable(&self) -> Option<rustix::fd::BorrowedFd> {
1919
None
2020
}
2121

2222
#[cfg(windows)]
23-
fn pollable(&self) -> Option<Arc<dyn AsRawHandleOrSocket + '_>> {
23+
fn pollable(&self) -> Option<io_extras::os::windows::RawHandleOrSocket> {
2424
None
2525
}
2626

0 commit comments

Comments
 (0)