Skip to content

Commit adbb89e

Browse files
committed
Auto merge of rust-lang#3763 - tiif:global-fd-id, r=oli-obk
Insert FileDescription instead of FileDescriptor in ``insert_fd`` This PR moves the creation of ``FileDescriptor`` inside ``insert_fd``, and ``insert_fd`` now takes in ``FileDescription`` instead of ``FileDescriptor``. This change is needed by rust-lang#3712.
2 parents bf4d4c0 + a52b1d6 commit adbb89e

File tree

6 files changed

+24
-34
lines changed

6 files changed

+24
-34
lines changed

src/tools/miri/src/machine.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ impl<'tcx> MiriMachine<'tcx> {
660660
tls: TlsData::default(),
661661
isolated_op: config.isolated_op,
662662
validate: config.validate,
663-
fds: shims::FdTable::new(config.mute_stdout_stderr),
663+
fds: shims::FdTable::init(config.mute_stdout_stderr),
664664
dirs: Default::default(),
665665
layouts,
666666
threads,

src/tools/miri/src/shims/unix/fd.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,6 @@ impl FileDescription for NullOutput {
192192
pub struct FileDescriptor(Rc<RefCell<Box<dyn FileDescription>>>);
193193

194194
impl FileDescriptor {
195-
pub fn new<T: FileDescription>(fd: T) -> Self {
196-
FileDescriptor(Rc::new(RefCell::new(Box::new(fd))))
197-
}
198-
199195
pub fn borrow(&self) -> Ref<'_, dyn FileDescription> {
200196
Ref::map(self.0.borrow(), |fd| fd.as_ref())
201197
}
@@ -227,20 +223,25 @@ impl VisitProvenance for FdTable {
227223
}
228224

229225
impl FdTable {
230-
pub(crate) fn new(mute_stdout_stderr: bool) -> FdTable {
231-
let mut fds: BTreeMap<_, FileDescriptor> = BTreeMap::new();
232-
fds.insert(0i32, FileDescriptor::new(io::stdin()));
226+
fn new() -> Self {
227+
FdTable { fds: BTreeMap::new() }
228+
}
229+
pub(crate) fn init(mute_stdout_stderr: bool) -> FdTable {
230+
let mut fds = FdTable::new();
231+
fds.insert_fd(io::stdin());
233232
if mute_stdout_stderr {
234-
fds.insert(1i32, FileDescriptor::new(NullOutput));
235-
fds.insert(2i32, FileDescriptor::new(NullOutput));
233+
assert_eq!(fds.insert_fd(NullOutput), 1);
234+
assert_eq!(fds.insert_fd(NullOutput), 2);
236235
} else {
237-
fds.insert(1i32, FileDescriptor::new(io::stdout()));
238-
fds.insert(2i32, FileDescriptor::new(io::stderr()));
236+
assert_eq!(fds.insert_fd(io::stdout()), 1);
237+
assert_eq!(fds.insert_fd(io::stderr()), 2);
239238
}
240-
FdTable { fds }
239+
fds
241240
}
242241

243-
pub fn insert_fd(&mut self, file_handle: FileDescriptor) -> i32 {
242+
/// Insert a file descriptor to the FdTable.
243+
pub fn insert_fd<T: FileDescription>(&mut self, fd: T) -> i32 {
244+
let file_handle = FileDescriptor(Rc::new(RefCell::new(Box::new(fd))));
244245
self.insert_fd_with_min_fd(file_handle, 0)
245246
}
246247

src/tools/miri/src/shims/unix/fs.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ use crate::shims::unix::*;
1616
use crate::*;
1717
use shims::time::system_time_to_duration;
1818

19-
use self::fd::FileDescriptor;
20-
2119
#[derive(Debug)]
2220
struct FileHandle {
2321
file: File,
@@ -452,10 +450,9 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
452450
return Ok(-1);
453451
}
454452

455-
let fd = options.open(path).map(|file| {
456-
let fh = &mut this.machine.fds;
457-
fh.insert_fd(FileDescriptor::new(FileHandle { file, writable }))
458-
});
453+
let fd = options
454+
.open(path)
455+
.map(|file| this.machine.fds.insert_fd(FileHandle { file, writable }));
459456

460457
this.try_unwrap_io_result(fd)
461458
}
@@ -1547,9 +1544,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
15471544

15481545
match file {
15491546
Ok(f) => {
1550-
let fh = &mut this.machine.fds;
1551-
let fd =
1552-
fh.insert_fd(FileDescriptor::new(FileHandle { file: f, writable: true }));
1547+
let fd = this.machine.fds.insert_fd(FileHandle { file: f, writable: true });
15531548
return Ok(fd);
15541549
}
15551550
Err(e) =>

src/tools/miri/src/shims/unix/linux/epoll.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ use rustc_data_structures::fx::FxHashMap;
55
use crate::shims::unix::*;
66
use crate::*;
77

8-
use self::shims::unix::fd::FileDescriptor;
9-
108
/// An `Epoll` file descriptor connects file handles and epoll events
119
#[derive(Clone, Debug, Default)]
1210
struct Epoll {
@@ -66,7 +64,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
6664
);
6765
}
6866

69-
let fd = this.machine.fds.insert_fd(FileDescriptor::new(Epoll::default()));
67+
let fd = this.machine.fds.insert_fd(Epoll::default());
7068
Ok(Scalar::from_i32(fd))
7169
}
7270

src/tools/miri/src/shims/unix/linux/eventfd.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ use rustc_target::abi::Endian;
88
use crate::shims::unix::*;
99
use crate::{concurrency::VClock, *};
1010

11-
use self::shims::unix::fd::FileDescriptor;
12-
1311
// We'll only do reads and writes in chunks of size u64.
1412
const U64_ARRAY_SIZE: usize = mem::size_of::<u64>();
1513

@@ -180,11 +178,11 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
180178
throw_unsup_format!("eventfd: encountered unknown unsupported flags {:#x}", flags);
181179
}
182180

183-
let fd = this.machine.fds.insert_fd(FileDescriptor::new(Event {
181+
let fd = this.machine.fds.insert_fd(Event {
184182
counter: val.into(),
185183
is_nonblock,
186184
clock: VClock::default(),
187-
}));
185+
});
188186
Ok(Scalar::from_i32(fd))
189187
}
190188
}

src/tools/miri/src/shims/unix/socket.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ use std::rc::{Rc, Weak};
77
use crate::shims::unix::*;
88
use crate::{concurrency::VClock, *};
99

10-
use self::fd::FileDescriptor;
11-
1210
/// The maximum capacity of the socketpair buffer in bytes.
1311
/// This number is arbitrary as the value can always
1412
/// be configured in the real system.
@@ -221,9 +219,9 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
221219
};
222220

223221
let fds = &mut this.machine.fds;
224-
let sv0 = fds.insert_fd(FileDescriptor::new(socketpair_0));
222+
let sv0 = fds.insert_fd(socketpair_0);
223+
let sv1 = fds.insert_fd(socketpair_1);
225224
let sv0 = Scalar::from_int(sv0, sv.layout.size);
226-
let sv1 = fds.insert_fd(FileDescriptor::new(socketpair_1));
227225
let sv1 = Scalar::from_int(sv1, sv.layout.size);
228226

229227
this.write_scalar(sv0, &sv)?;

0 commit comments

Comments
 (0)