Skip to content

Commit c98578c

Browse files
authored
Merge pull request #1988 from hermit-os/rm-map_try_insert
refactor: remove nightly feature `map_try_insert`
2 parents 54ef48b + 289fdbd commit c98578c

File tree

4 files changed

+37
-52
lines changed

4 files changed

+37
-52
lines changed

src/executor/vsock.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use alloc::collections::BTreeMap;
1+
use alloc::collections::{BTreeMap, btree_map};
22
use alloc::vec::Vec;
33
use core::future;
44
use core::task::Poll;
@@ -170,10 +170,15 @@ impl VsockMap {
170170
}
171171

172172
pub fn bind(&mut self, port: u32) -> io::Result<()> {
173-
self.port_map
174-
.try_insert(port, RawSocket::new(VsockState::Listen))
175-
.map_err(|_| Errno::Addrinuse)?;
176-
Ok(())
173+
let entry = self.port_map.entry(port);
174+
175+
match entry {
176+
btree_map::Entry::Vacant(vacant_entry) => {
177+
vacant_entry.insert(RawSocket::new(VsockState::Listen));
178+
Ok(())
179+
}
180+
btree_map::Entry::Occupied(_occupied_entry) => Err(Errno::Addrinuse),
181+
}
177182
}
178183

179184
pub fn connect(&mut self, port: u32, cid: u32) -> io::Result<u32> {
@@ -182,7 +187,8 @@ impl VsockMap {
182187
raw.remote_cid = cid;
183188
raw.remote_port = port;
184189

185-
if self.port_map.try_insert(i, raw).is_ok() {
190+
if let btree_map::Entry::Vacant(vacant_entry) = self.port_map.entry(i) {
191+
vacant_entry.insert(raw);
186192
return Ok(i);
187193
}
188194
}

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#![feature(allocator_api)]
1212
#![feature(linkage)]
1313
#![feature(linked_list_cursors)]
14-
#![feature(map_try_insert)]
1514
#![feature(maybe_uninit_as_bytes)]
1615
#![feature(maybe_uninit_slice)]
1716
#![feature(maybe_uninit_write_slice)]

src/scheduler/mod.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use core::sync::atomic::{AtomicI32, AtomicU32, Ordering};
1414

1515
use ahash::RandomState;
1616
use crossbeam_utils::Backoff;
17-
use hashbrown::HashMap;
17+
use hashbrown::{HashMap, hash_map};
1818
use hermit_sync::*;
1919
#[cfg(target_arch = "riscv64")]
2020
use riscv::register::sstatus;
@@ -564,10 +564,12 @@ impl PerCoreScheduler {
564564
};
565565

566566
let fd = new_fd()?;
567-
if object_map.try_insert(fd, obj).is_err() {
568-
Err(Errno::Mfile)
569-
} else {
570-
Ok(fd)
567+
match object_map.entry(fd) {
568+
hash_map::Entry::Occupied(_occupied_entry) => Err(Errno::Mfile),
569+
hash_map::Entry::Vacant(vacant_entry) => {
570+
vacant_entry.insert(obj);
571+
Ok(fd)
572+
}
571573
}
572574
})
573575
}
@@ -583,10 +585,12 @@ impl PerCoreScheduler {
583585

584586
let obj = object_map.get(&fd1).cloned().ok_or(Errno::Badf)?;
585587

586-
if object_map.try_insert(fd2, obj).is_err() {
587-
Err(Errno::Mfile)
588-
} else {
589-
Ok(fd2)
588+
match object_map.entry(fd2) {
589+
hash_map::Entry::Occupied(_occupied_entry) => Err(Errno::Mfile),
590+
hash_map::Entry::Vacant(vacant_entry) => {
591+
vacant_entry.insert(obj);
592+
Ok(fd2)
593+
}
590594
}
591595
})
592596
}

src/scheduler/task/mod.rs

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -468,43 +468,19 @@ impl Task {
468468
let objmap = OBJECT_MAP.get().unwrap().clone();
469469
let mut guard = objmap.write();
470470
if env::is_uhyve() {
471-
guard
472-
.try_insert(
473-
STDIN_FILENO,
474-
Arc::new(async_lock::RwLock::new(UhyveStdin::new())),
475-
)
476-
.expect("cannot insert stdin");
477-
guard
478-
.try_insert(
479-
STDOUT_FILENO,
480-
Arc::new(async_lock::RwLock::new(UhyveStdout::new())),
481-
)
482-
.expect("cannot insert stdout");
483-
guard
484-
.try_insert(
485-
STDERR_FILENO,
486-
Arc::new(async_lock::RwLock::new(UhyveStderr::new())),
487-
)
488-
.expect("cannot insert stderr");
471+
let stdin = Arc::new(async_lock::RwLock::new(UhyveStdin::new()));
472+
let stdout = Arc::new(async_lock::RwLock::new(UhyveStdout::new()));
473+
let stderr = Arc::new(async_lock::RwLock::new(UhyveStderr::new()));
474+
guard.insert(STDIN_FILENO, stdin);
475+
guard.insert(STDOUT_FILENO, stdout);
476+
guard.insert(STDERR_FILENO, stderr);
489477
} else {
490-
guard
491-
.try_insert(
492-
STDIN_FILENO,
493-
Arc::new(async_lock::RwLock::new(GenericStdin::new())),
494-
)
495-
.expect("cannot insert stdin");
496-
guard
497-
.try_insert(
498-
STDOUT_FILENO,
499-
Arc::new(async_lock::RwLock::new(GenericStdout::new())),
500-
)
501-
.expect("cannot insert stdout");
502-
guard
503-
.try_insert(
504-
STDERR_FILENO,
505-
Arc::new(async_lock::RwLock::new(GenericStderr::new())),
506-
)
507-
.expect("cannot insert stderr");
478+
let stdin = Arc::new(async_lock::RwLock::new(GenericStdin::new()));
479+
let stdout = Arc::new(async_lock::RwLock::new(GenericStdout::new()));
480+
let stderr = Arc::new(async_lock::RwLock::new(GenericStderr::new()));
481+
guard.insert(STDIN_FILENO, stdin);
482+
guard.insert(STDOUT_FILENO, stdout);
483+
guard.insert(STDERR_FILENO, stderr);
508484
}
509485
}
510486

0 commit comments

Comments
 (0)