0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

refactor: don't call Context::Global in async_op_response (#9971)

This commit is contained in:
Ryan Dahl 2021-04-03 08:33:01 -04:00 committed by GitHub
parent 105c0ee3b4
commit d2fbbfbbf3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1405,11 +1405,6 @@ impl JsRuntime {
let context = self.global_context();
let scope = &mut v8::HandleScope::with_context(self.v8_isolate(), context);
let context = scope.get_current_context();
let global: v8::Local<v8::Value> = context.global(scope).into();
let js_recv_cb = js_recv_cb_handle.get(scope);
let tc_scope = &mut v8::TryCatch::new(scope);
// We return async responses to JS in unbounded batches (may change),
// each batch is a flat vector of tuples:
@ -1422,18 +1417,19 @@ impl JsRuntime {
Vec::with_capacity(2 * async_responses_size);
for overflown_response in async_responses {
let (promise_id, resp) = overflown_response;
args.push(v8::Integer::new(tc_scope, promise_id as i32).into());
args.push(v8::Integer::new(scope, promise_id as i32).into());
args.push(match resp {
OpResponse::Value(value) => serde_v8::to_v8(tc_scope, value).unwrap(),
OpResponse::Value(value) => serde_v8::to_v8(scope, value).unwrap(),
OpResponse::Buffer(buf) => {
bindings::boxed_slice_to_uint8array(tc_scope, buf).into()
bindings::boxed_slice_to_uint8array(scope, buf).into()
}
});
}
if async_responses_size > 0 {
js_recv_cb.call(tc_scope, global, args.as_slice());
}
let tc_scope = &mut v8::TryCatch::new(scope);
let js_recv_cb = js_recv_cb_handle.get(tc_scope);
let this = v8::undefined(tc_scope).into();
js_recv_cb.call(tc_scope, this, args.as_slice());
match tc_scope.exception() {
None => Ok(()),
@ -1450,17 +1446,15 @@ impl JsRuntime {
let context = self.global_context();
let scope = &mut v8::HandleScope::with_context(self.v8_isolate(), context);
let context = scope.get_current_context();
let global: v8::Local<v8::Value> = context.global(scope).into();
let js_macrotask_cb = js_macrotask_cb_handle.get(scope);
// Repeatedly invoke macrotask callback until it returns true (done),
// such that ready microtasks would be automatically run before
// next macrotask is processed.
let tc_scope = &mut v8::TryCatch::new(scope);
let this = v8::undefined(tc_scope).into();
loop {
let is_done = js_macrotask_cb.call(tc_scope, global, &[]);
let is_done = js_macrotask_cb.call(tc_scope, this, &[]);
if let Some(exception) = tc_scope.exception() {
return exception_to_err_result(tc_scope, exception, false);