summaryrefslogtreecommitdiff
path: root/core/realm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/realm.rs')
-rw-r--r--core/realm.rs19
1 files changed, 3 insertions, 16 deletions
diff --git a/core/realm.rs b/core/realm.rs
index f907553f0..375f74088 100644
--- a/core/realm.rs
+++ b/core/realm.rs
@@ -7,8 +7,8 @@ use crate::runtime::exception_to_err_result;
use crate::JsRuntime;
use anyhow::Error;
use std::cell::RefCell;
-use std::collections::HashMap;
use std::collections::HashSet;
+use std::collections::VecDeque;
use std::hash::BuildHasherDefault;
use std::hash::Hasher;
use std::option::Option;
@@ -43,7 +43,7 @@ pub(crate) struct ContextState {
pub(crate) js_format_exception_cb: Option<Rc<v8::Global<v8::Function>>>,
pub(crate) js_wasm_streaming_cb: Option<Rc<v8::Global<v8::Function>>>,
pub(crate) pending_promise_rejections:
- HashMap<v8::Global<v8::Promise>, v8::Global<v8::Value>>,
+ VecDeque<(v8::Global<v8::Promise>, v8::Global<v8::Value>)>,
pub(crate) unrefed_ops: HashSet<i32, BuildHasherDefault<IdentityHasher>>,
// We don't explicitly re-read this prop but need the slice to live alongside
// the context
@@ -270,22 +270,9 @@ impl<'s> JsRealmLocal<'s> {
let context_state_rc = self.state(scope);
let mut context_state = context_state_rc.borrow_mut();
- if context_state.pending_promise_rejections.is_empty() {
+ let Some((_, handle)) = context_state.pending_promise_rejections.pop_front() else {
return Ok(());
- }
-
- let key = {
- context_state
- .pending_promise_rejections
- .keys()
- .next()
- .unwrap()
- .clone()
};
- let handle = context_state
- .pending_promise_rejections
- .remove(&key)
- .unwrap();
drop(context_state);
let exception = v8::Local::new(scope, handle);