mirror of
https://github.com/denoland/deno.git
synced 2025-09-27 12:49:10 +00:00
fix(ext/web): add stream tests to detect v8slice split bug (#20253)
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
parent
af1b794e53
commit
b1ce2e4167
43 changed files with 191 additions and 72 deletions
26
Cargo.lock
generated
26
Cargo.lock
generated
|
@ -1007,13 +1007,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deno_core"
|
name = "deno_core"
|
||||||
version = "0.202.0"
|
version = "0.204.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e9d4f3ad9c2861e0bb8745e1f228aaee04782a9ab6a3c3bbb887e60d7faf087a"
|
checksum = "b4ddf51deb9a3bb60a4ab74784414b3f2f89de83a77d6d90a64c6447f7765d68"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
"deno_ops",
|
"deno_ops",
|
||||||
|
"deno_unsync",
|
||||||
"futures",
|
"futures",
|
||||||
"indexmap 1.9.3",
|
"indexmap 1.9.3",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -1386,9 +1387,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deno_ops"
|
name = "deno_ops"
|
||||||
version = "0.80.0"
|
version = "0.82.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "abb6a1ceabfbab1c29b32872e68ec994d393b58ccdf12a835d150199555496f3"
|
checksum = "1b660872f9a9737d3424470483dd6730d2129481af5055449a2a37ab5bc2145e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deno-proc-macro-rules",
|
"deno-proc-macro-rules",
|
||||||
"lazy-regex",
|
"lazy-regex",
|
||||||
|
@ -1503,6 +1504,15 @@ dependencies = [
|
||||||
"webpki-roots",
|
"webpki-roots",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "deno_unsync"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac0984205f25e71ddd1be603d76e70255953c12ff864707359ab195d26dfc7b3"
|
||||||
|
dependencies = [
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deno_url"
|
name = "deno_url"
|
||||||
version = "0.115.0"
|
version = "0.115.0"
|
||||||
|
@ -4488,9 +4498,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_v8"
|
name = "serde_v8"
|
||||||
version = "0.113.0"
|
version = "0.115.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fa7b3ecd650d790ff8781402d0704d35a2f51c3bec87fe92d43eea6d371f05d"
|
checksum = "36f6cc041512391aabdae4dd11d51e370824ea35bfe896fb2585b6792e28c9bf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"derive_more",
|
"derive_more",
|
||||||
|
@ -5914,9 +5924,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "v8"
|
name = "v8"
|
||||||
version = "0.75.0"
|
version = "0.74.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f9be435abe79a8427b0969f1ac0a3c0e91644235f68a3de5da4a27ec69666985"
|
checksum = "2eedac634b8dd39b889c5b62349cbc55913780226239166435c5cf66771792ea"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
"fslock",
|
"fslock",
|
||||||
|
|
|
@ -40,7 +40,7 @@ repository = "https://github.com/denoland/deno"
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
deno_ast = { version = "0.28.0", features = ["transpiling"] }
|
deno_ast = { version = "0.28.0", features = ["transpiling"] }
|
||||||
|
|
||||||
deno_core = "0.202.0"
|
deno_core = "0.204.0"
|
||||||
|
|
||||||
deno_runtime = { version = "0.123.0", path = "./runtime" }
|
deno_runtime = { version = "0.123.0", path = "./runtime" }
|
||||||
napi_sym = { version = "0.45.0", path = "./cli/napi/sym" }
|
napi_sym = { version = "0.45.0", path = "./cli/napi/sym" }
|
||||||
|
|
2
cli/cache/cache_db.rs
vendored
2
cli/cache/cache_db.rs
vendored
|
@ -3,7 +3,7 @@
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::parking_lot::MutexGuard;
|
use deno_core::parking_lot::MutexGuard;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_runtime::deno_webstorage::rusqlite;
|
use deno_runtime::deno_webstorage::rusqlite;
|
||||||
use deno_runtime::deno_webstorage::rusqlite::Connection;
|
use deno_runtime::deno_webstorage::rusqlite::Connection;
|
||||||
use deno_runtime::deno_webstorage::rusqlite::OptionalExtension;
|
use deno_runtime::deno_webstorage::rusqlite::OptionalExtension;
|
||||||
|
|
4
cli/cache/incremental.rs
vendored
4
cli/cache/incremental.rs
vendored
|
@ -7,8 +7,8 @@ use std::path::PathBuf;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_runtime::deno_webstorage::rusqlite::params;
|
use deno_runtime::deno_webstorage::rusqlite::params;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ use deno_core::anyhow::bail;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use tower_lsp::lsp_types as lsp;
|
use tower_lsp::lsp_types as lsp;
|
||||||
use tower_lsp::lsp_types::ConfigurationItem;
|
use tower_lsp::lsp_types::ConfigurationItem;
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,9 @@ use deno_core::resolve_url;
|
||||||
use deno_core::serde::Deserialize;
|
use deno_core::serde::Deserialize;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_core::serde_json::json;
|
use deno_core::serde_json::json;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_graph::Resolution;
|
use deno_graph::Resolution;
|
||||||
use deno_graph::ResolutionError;
|
use deno_graph::ResolutionError;
|
||||||
|
|
|
@ -8,7 +8,7 @@ use deno_core::resolve_url;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_core::serde_json::json;
|
use deno_core::serde_json::json;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_graph::GraphKind;
|
use deno_graph::GraphKind;
|
||||||
use deno_lockfile::Lockfile;
|
use deno_lockfile::Lockfile;
|
||||||
|
@ -1705,7 +1705,7 @@ impl Inner {
|
||||||
}
|
}
|
||||||
|
|
||||||
// spawn a blocking task to allow doing other work while this is occurring
|
// spawn a blocking task to allow doing other work while this is occurring
|
||||||
let format_result = deno_core::task::spawn_blocking({
|
let format_result = deno_core::unsync::spawn_blocking({
|
||||||
let fmt_options = self.fmt_options.options.clone();
|
let fmt_options = self.fmt_options.options.clone();
|
||||||
let document = document.clone();
|
let document = document.clone();
|
||||||
move || {
|
move || {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
use tokio::time::Duration;
|
use tokio::time::Duration;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@ use deno_core::futures::stream;
|
||||||
use deno_core::futures::StreamExt;
|
use deno_core::futures::StreamExt;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::parking_lot::RwLock;
|
use deno_core::parking_lot::RwLock;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_runtime::permissions::Permissions;
|
use deno_runtime::permissions::Permissions;
|
||||||
use deno_runtime::tokio_util::create_and_run_current_thread;
|
use deno_runtime::tokio_util::create_and_run_current_thread;
|
||||||
|
|
|
@ -36,7 +36,7 @@ use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::error::JsError;
|
use deno_core::error::JsError;
|
||||||
use deno_core::futures::FutureExt;
|
use deno_core::futures::FutureExt;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_runtime::colors;
|
use deno_runtime::colors;
|
||||||
use deno_runtime::fmt_errors::format_js_error;
|
use deno_runtime::fmt_errors::format_js_error;
|
||||||
use deno_runtime::tokio_util::create_and_run_current_thread_with_maybe_metrics;
|
use deno_runtime::tokio_util::create_and_run_current_thread_with_maybe_metrics;
|
||||||
|
@ -76,7 +76,7 @@ impl SubcommandOutput for Result<(), std::io::Error> {
|
||||||
fn spawn_subcommand<F: Future<Output = T> + 'static, T: SubcommandOutput>(
|
fn spawn_subcommand<F: Future<Output = T> + 'static, T: SubcommandOutput>(
|
||||||
f: F,
|
f: F,
|
||||||
) -> JoinHandle<Result<i32, AnyError>> {
|
) -> JoinHandle<Result<i32, AnyError>> {
|
||||||
deno_core::task::spawn(f.map(|r| r.output()))
|
deno_core::unsync::spawn(f.map(|r| r.output()))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn run_subcommand(flags: Flags) -> Result<i32, AnyError> {
|
async fn run_subcommand(flags: Flags) -> Result<i32, AnyError> {
|
||||||
|
|
|
@ -11,7 +11,7 @@ use async_trait::async_trait;
|
||||||
use deno_ast::ModuleSpecifier;
|
use deno_ast::ModuleSpecifier;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures;
|
use deno_core::futures;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_npm::NpmPackageCacheFolderId;
|
use deno_npm::NpmPackageCacheFolderId;
|
||||||
use deno_npm::NpmPackageId;
|
use deno_npm::NpmPackageId;
|
||||||
|
|
|
@ -24,8 +24,8 @@ use deno_ast::ModuleSpecifier;
|
||||||
use deno_core::anyhow::bail;
|
use deno_core::anyhow::bail;
|
||||||
use deno_core::anyhow::Context;
|
use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_npm::resolution::NpmResolutionSnapshot;
|
use deno_npm::resolution::NpmResolutionSnapshot;
|
||||||
use deno_npm::NpmPackageCacheFolderId;
|
use deno_npm::NpmPackageCacheFolderId;
|
||||||
|
|
|
@ -34,7 +34,7 @@ where
|
||||||
Fut::Output: Send + 'static,
|
Fut::Output: Send + 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4220,7 +4220,7 @@ where
|
||||||
Fut::Output: Send + 'static,
|
Fut::Output: Send + 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
cli/tests/testdata/run/heapstats.js.out
vendored
4
cli/tests/testdata/run/heapstats.js.out
vendored
|
@ -1,2 +1,2 @@
|
||||||
Allocated: 4MB
|
Allocated: 8MB
|
||||||
Freed: -4MB
|
Freed: -8MB
|
||||||
|
|
|
@ -1483,6 +1483,48 @@ Deno.test(
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Make sure that the chunks of a large response aren't repeated or corrupted in some other way by
|
||||||
|
// scatterning sentinels throughout.
|
||||||
|
// https://github.com/denoland/fresh/issues/1699
|
||||||
|
Deno.test(
|
||||||
|
{ permissions: { net: true } },
|
||||||
|
async function httpLargeReadableStreamChunk() {
|
||||||
|
const ac = new AbortController();
|
||||||
|
const server = Deno.serve({
|
||||||
|
handler() {
|
||||||
|
return new Response(
|
||||||
|
new ReadableStream({
|
||||||
|
start(controller) {
|
||||||
|
const buffer = new Uint8Array(1024 * 1024);
|
||||||
|
// Mark the buffer with sentinels
|
||||||
|
for (let i = 0; i < 256; i++) {
|
||||||
|
buffer[i * 4096] = i;
|
||||||
|
}
|
||||||
|
controller.enqueue(buffer);
|
||||||
|
controller.close();
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
port: servePort,
|
||||||
|
signal: ac.signal,
|
||||||
|
});
|
||||||
|
const response = await fetch(`http://localhost:${servePort}/`);
|
||||||
|
const body = await response.arrayBuffer();
|
||||||
|
assertEquals(1024 * 1024, body.byteLength);
|
||||||
|
const buffer = new Uint8Array(body);
|
||||||
|
for (let i = 0; i < 256; i++) {
|
||||||
|
assertEquals(
|
||||||
|
i,
|
||||||
|
buffer[i * 4096],
|
||||||
|
`sentinel mismatch at index ${i * 4096}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
ac.abort();
|
||||||
|
await server.finished;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
Deno.test(
|
Deno.test(
|
||||||
{ permissions: { net: true } },
|
{ permissions: { net: true } },
|
||||||
async function httpRequestLatin1Headers() {
|
async function httpRequestLatin1Headers() {
|
||||||
|
|
|
@ -77,6 +77,22 @@ function emptyStream(onPull: boolean) {
|
||||||
}).pipeThrough(new TextEncoderStream());
|
}).pipeThrough(new TextEncoderStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function largePacketStream(packetSize: number, count: number) {
|
||||||
|
return new ReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
if (count-- > 0) {
|
||||||
|
const buffer = new Uint8Array(packetSize);
|
||||||
|
for (let i = 0; i < 256; i++) {
|
||||||
|
buffer[i * (packetSize / 256)] = i;
|
||||||
|
}
|
||||||
|
controller.enqueue(buffer);
|
||||||
|
} else {
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Include an empty chunk
|
// Include an empty chunk
|
||||||
function emptyChunkStream() {
|
function emptyChunkStream() {
|
||||||
return new ReadableStream({
|
return new ReadableStream({
|
||||||
|
@ -260,6 +276,61 @@ Deno.test(async function readableStreamWithEmptyChunkOneByOne() {
|
||||||
core.ops.op_close(rid);
|
core.ops.op_close(rid);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Ensure that we correctly transmit all the sub-chunks of the larger chunks.
|
||||||
|
Deno.test(async function readableStreamReadSmallerChunks() {
|
||||||
|
const packetSize = 16 * 1024;
|
||||||
|
const rid = resourceForReadableStream(largePacketStream(packetSize, 1));
|
||||||
|
const buffer = new Uint8Array(packetSize);
|
||||||
|
for (let i = 0; i < packetSize / 1024; i++) {
|
||||||
|
await core.ops.op_read(rid, buffer.subarray(i * 1024, i * 1024 + 1024));
|
||||||
|
}
|
||||||
|
for (let i = 0; i < 256; i++) {
|
||||||
|
assertEquals(
|
||||||
|
i,
|
||||||
|
buffer[i * (packetSize / 256)],
|
||||||
|
`at index ${i * (packetSize / 256)}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
core.ops.op_close(rid);
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test(async function readableStreamLargePackets() {
|
||||||
|
const packetSize = 128 * 1024;
|
||||||
|
const rid = resourceForReadableStream(largePacketStream(packetSize, 1024));
|
||||||
|
for (let i = 0; i < 1024; i++) {
|
||||||
|
const buffer = new Uint8Array(packetSize);
|
||||||
|
assertEquals(packetSize, await core.ops.op_read(rid, buffer));
|
||||||
|
for (let i = 0; i < 256; i++) {
|
||||||
|
assertEquals(
|
||||||
|
i,
|
||||||
|
buffer[i * (packetSize / 256)],
|
||||||
|
`at index ${i * (packetSize / 256)}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals(0, await core.ops.op_read(rid, new Uint8Array(1)));
|
||||||
|
core.ops.op_close(rid);
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test(async function readableStreamVeryLargePackets() {
|
||||||
|
// 1024 packets of 1MB
|
||||||
|
const rid = resourceForReadableStream(largePacketStream(1024 * 1024, 1024));
|
||||||
|
let total = 0;
|
||||||
|
// Read 96kB up to 12,288 times (96kB is not an even multiple of the 1MB packet size to test this)
|
||||||
|
const readCounts: Record<number, number> = {};
|
||||||
|
for (let i = 0; i < 12 * 1024; i++) {
|
||||||
|
const nread = await core.ops.op_read(rid, new Uint8Array(96 * 1024));
|
||||||
|
total += nread;
|
||||||
|
readCounts[nread] = (readCounts[nread] || 0) + 1;
|
||||||
|
if (nread == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertEquals({ 0: 1, 65536: 1024, 98304: 10 * 1024 }, readCounts);
|
||||||
|
assertEquals(total, 1024 * 1024 * 1024);
|
||||||
|
core.ops.op_close(rid);
|
||||||
|
});
|
||||||
|
|
||||||
for (const count of [0, 1, 2, 3]) {
|
for (const count of [0, 1, 2, 3]) {
|
||||||
for (const delay of [0, 1, 10]) {
|
for (const delay of [0, 1, 10]) {
|
||||||
// Creating a stream that errors in start will throw
|
// Creating a stream that errors in start will throw
|
||||||
|
|
|
@ -27,8 +27,8 @@ use deno_core::futures::stream;
|
||||||
use deno_core::futures::StreamExt;
|
use deno_core::futures::StreamExt;
|
||||||
use deno_core::located_script_name;
|
use deno_core::located_script_name;
|
||||||
use deno_core::serde_v8;
|
use deno_core::serde_v8;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::v8;
|
use deno_core::v8;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_runtime::permissions::Permissions;
|
use deno_runtime::permissions::Permissions;
|
||||||
|
|
|
@ -29,7 +29,7 @@ use deno_core::error::generic_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures;
|
use deno_core::futures;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use log::info;
|
use log::info;
|
||||||
use log::warn;
|
use log::warn;
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::factory::CliFactory;
|
||||||
use crate::file_fetcher::FileFetcher;
|
use crate::file_fetcher::FileFetcher;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures::StreamExt;
|
use deno_core::futures::StreamExt;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_runtime::permissions::Permissions;
|
use deno_runtime::permissions::Permissions;
|
||||||
use deno_runtime::permissions::PermissionsContainer;
|
use deno_runtime::permissions::PermissionsContainer;
|
||||||
use rustyline::error::ReadlineError;
|
use rustyline::error::ReadlineError;
|
||||||
|
|
|
@ -40,8 +40,8 @@ use deno_core::futures::StreamExt;
|
||||||
use deno_core::located_script_name;
|
use deno_core::located_script_name;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::serde_v8;
|
use deno_core::serde_v8;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_core::v8;
|
use deno_core::v8;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
|
|
|
@ -17,7 +17,7 @@ use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures::future::BoxFuture;
|
use deno_core::futures::future::BoxFuture;
|
||||||
use deno_core::futures::FutureExt;
|
use deno_core::futures::FutureExt;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_semver::Version;
|
use deno_semver::Version;
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use console_static_text::ConsoleStaticText;
|
use console_static_text::ConsoleStaticText;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_runtime::ops::tty::ConsoleSize;
|
use deno_runtime::ops::tty::ConsoleSize;
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
use deno_core::anyhow::Context;
|
use deno_core::anyhow::Context;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
pub use deno_core::normalize_path;
|
pub use deno_core::normalize_path;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
use deno_runtime::deno_crypto::rand;
|
use deno_runtime::deno_crypto::rand;
|
||||||
use deno_runtime::deno_node::PathClean;
|
use deno_runtime::deno_node::PathClean;
|
||||||
|
|
2
ext/cache/sqlite.rs
vendored
2
ext/cache/sqlite.rs
vendored
|
@ -10,7 +10,7 @@ use std::time::UNIX_EPOCH;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
use deno_core::ByteString;
|
use deno_core::ByteString;
|
||||||
|
|
|
@ -20,7 +20,7 @@ use deno_core::error::custom_error;
|
||||||
use deno_core::error::type_error;
|
use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::JsBuffer;
|
use deno_core::JsBuffer;
|
||||||
use deno_core::ToJsBuffer;
|
use deno_core::ToJsBuffer;
|
||||||
use rsa::pkcs1::DecodeRsaPrivateKey;
|
use rsa::pkcs1::DecodeRsaPrivateKey;
|
||||||
|
|
|
@ -19,7 +19,7 @@ use ctr::Ctr64BE;
|
||||||
use deno_core::error::type_error;
|
use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::JsBuffer;
|
use deno_core::JsBuffer;
|
||||||
use deno_core::ToJsBuffer;
|
use deno_core::ToJsBuffer;
|
||||||
use rand::rngs::OsRng;
|
use rand::rngs::OsRng;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::ToJsBuffer;
|
use deno_core::ToJsBuffer;
|
||||||
use elliptic_curve::rand_core::OsRng;
|
use elliptic_curve::rand_core::OsRng;
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
|
|
|
@ -11,7 +11,7 @@ use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::ToJsBuffer;
|
use deno_core::ToJsBuffer;
|
||||||
|
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::JsBuffer;
|
use deno_core::JsBuffer;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
|
@ -24,7 +24,7 @@ use deno_core::op;
|
||||||
use deno_core::BufView;
|
use deno_core::BufView;
|
||||||
use deno_core::WriteOutcome;
|
use deno_core::WriteOutcome;
|
||||||
|
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
|
|
|
@ -15,7 +15,7 @@ use deno_core::op;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
use deno_core::serde_v8;
|
use deno_core::serde_v8;
|
||||||
use deno_core::serde_v8::ExternalPointer;
|
use deno_core::serde_v8::ExternalPointer;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::v8;
|
use deno_core::v8;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use deno_core::ResourceId;
|
use deno_core::ResourceId;
|
||||||
|
|
|
@ -9,7 +9,7 @@ use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_io::fs::File;
|
use deno_io::fs::File;
|
||||||
use deno_io::fs::FsResult;
|
use deno_io::fs::FsResult;
|
||||||
use deno_io::fs::FsStat;
|
use deno_io::fs::FsStat;
|
||||||
|
|
|
@ -25,8 +25,8 @@ use deno_core::op;
|
||||||
use deno_core::op2;
|
use deno_core::op2;
|
||||||
use deno_core::serde_v8;
|
use deno_core::serde_v8;
|
||||||
use deno_core::serde_v8::from_v8;
|
use deno_core::serde_v8::from_v8;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_core::v8;
|
use deno_core::v8;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
|
|
|
@ -21,7 +21,7 @@ use deno_core::futures::FutureExt;
|
||||||
use deno_core::futures::StreamExt;
|
use deno_core::futures::StreamExt;
|
||||||
use deno_core::futures::TryFutureExt;
|
use deno_core::futures::TryFutureExt;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
use deno_core::BufView;
|
use deno_core::BufView;
|
||||||
|
@ -1021,7 +1021,7 @@ where
|
||||||
Fut::Output: 'static,
|
Fut::Output: 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1031,7 +1031,7 @@ where
|
||||||
Fut::Output: 'static,
|
Fut::Output: 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::AsyncMutFuture;
|
use deno_core::AsyncMutFuture;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
|
|
|
@ -24,7 +24,7 @@ use chrono::Utc;
|
||||||
use deno_core::error::type_error;
|
use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures::TryFutureExt;
|
use deno_core::futures::TryFutureExt;
|
||||||
use deno_core::task::JoinHandle;
|
use deno_core::unsync::JoinHandle;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
@ -357,7 +357,7 @@ impl MetadataRefresher {
|
||||||
pub fn new(url: String, access_token: String) -> Self {
|
pub fn new(url: String, access_token: String) -> Self {
|
||||||
let (tx, rx) = watch::channel(MetadataState::Pending);
|
let (tx, rx) = watch::channel(MetadataState::Pending);
|
||||||
let handle =
|
let handle =
|
||||||
deno_core::task::spawn(metadata_refresh_task(url, access_token, tx));
|
deno_core::unsync::spawn(metadata_refresh_task(url, access_token, tx));
|
||||||
Self {
|
Self {
|
||||||
handle,
|
handle,
|
||||||
metadata_rx: rx,
|
metadata_rx: rx,
|
||||||
|
|
|
@ -19,8 +19,8 @@ use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::futures;
|
use deno_core::futures;
|
||||||
use deno_core::futures::FutureExt;
|
use deno_core::futures::FutureExt;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
@ -285,7 +285,7 @@ impl<P: SqliteDbHandlerPermissions> DatabaseHandler for SqliteDbHandler<P> {
|
||||||
pub struct SqliteDb {
|
pub struct SqliteDb {
|
||||||
conn: ProtectedConn,
|
conn: ProtectedConn,
|
||||||
queue: OnceCell<SqliteQueue>,
|
queue: OnceCell<SqliteQueue>,
|
||||||
expiration_watcher: deno_core::task::JoinHandle<()>,
|
expiration_watcher: deno_core::unsync::JoinHandle<()>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for SqliteDb {
|
impl Drop for SqliteDb {
|
||||||
|
|
|
@ -26,7 +26,7 @@ use deno_core::futures::task::Waker;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
|
|
||||||
use deno_core::parking_lot::Mutex;
|
use deno_core::parking_lot::Mutex;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::AsyncRefCell;
|
use deno_core::AsyncRefCell;
|
||||||
use deno_core::AsyncResult;
|
use deno_core::AsyncResult;
|
||||||
use deno_core::ByteString;
|
use deno_core::ByteString;
|
||||||
|
|
|
@ -4,7 +4,7 @@ use deno_core::error::type_error;
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
use deno_core::op;
|
use deno_core::op;
|
||||||
use deno_core::serde_v8;
|
use deno_core::serde_v8;
|
||||||
use deno_core::task::spawn_blocking;
|
use deno_core::unsync::spawn_blocking;
|
||||||
use deno_core::JsBuffer;
|
use deno_core::JsBuffer;
|
||||||
use deno_core::OpState;
|
use deno_core::OpState;
|
||||||
use deno_core::ResourceId;
|
use deno_core::ResourceId;
|
||||||
|
|
|
@ -412,7 +412,7 @@ pub fn op_ws_send_binary(state: &mut OpState, rid: ResourceId, data: &[u8]) {
|
||||||
let len = data.len();
|
let len = data.len();
|
||||||
resource.buffered.set(resource.buffered.get() + len);
|
resource.buffered.set(resource.buffered.get() + len);
|
||||||
let lock = resource.reserve_lock();
|
let lock = resource.reserve_lock();
|
||||||
deno_core::task::spawn(async move {
|
deno_core::unsync::spawn(async move {
|
||||||
if let Err(err) = resource
|
if let Err(err) = resource
|
||||||
.write_frame(lock, Frame::new(true, OpCode::Binary, None, data.into()))
|
.write_frame(lock, Frame::new(true, OpCode::Binary, None, data.into()))
|
||||||
.await
|
.await
|
||||||
|
@ -430,7 +430,7 @@ pub fn op_ws_send_text(state: &mut OpState, rid: ResourceId, data: String) {
|
||||||
let len = data.len();
|
let len = data.len();
|
||||||
resource.buffered.set(resource.buffered.get() + len);
|
resource.buffered.set(resource.buffered.get() + len);
|
||||||
let lock = resource.reserve_lock();
|
let lock = resource.reserve_lock();
|
||||||
deno_core::task::spawn(async move {
|
deno_core::unsync::spawn(async move {
|
||||||
if let Err(err) = resource
|
if let Err(err) = resource
|
||||||
.write_frame(
|
.write_frame(
|
||||||
lock,
|
lock,
|
||||||
|
@ -719,6 +719,6 @@ where
|
||||||
Fut::Output: 'static,
|
Fut::Output: 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ use deno_core::futures::task::Poll;
|
||||||
use deno_core::serde_json;
|
use deno_core::serde_json;
|
||||||
use deno_core::serde_json::json;
|
use deno_core::serde_json::json;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
use deno_core::task::spawn;
|
use deno_core::unsync::spawn;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use deno_core::InspectorMsg;
|
use deno_core::InspectorMsg;
|
||||||
use deno_core::InspectorSessionProxy;
|
use deno_core::InspectorSessionProxy;
|
||||||
|
@ -111,7 +111,7 @@ where
|
||||||
Fut::Output: 'static,
|
Fut::Output: 'static,
|
||||||
{
|
{
|
||||||
fn execute(&self, fut: Fut) {
|
fn execute(&self, fut: Fut) {
|
||||||
deno_core::task::spawn(fut);
|
deno_core::unsync::spawn(fut);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use deno_core::task::MaskFutureAsSend;
|
use deno_core::unsync::MaskFutureAsSend;
|
||||||
#[cfg(tokio_unstable)]
|
#[cfg(tokio_unstable)]
|
||||||
use tokio_metrics::RuntimeMonitor;
|
use tokio_metrics::RuntimeMonitor;
|
||||||
|
|
||||||
|
|
|
@ -2807,12 +2807,8 @@
|
||||||
},
|
},
|
||||||
"class-string-interface.any.html": true,
|
"class-string-interface.any.html": true,
|
||||||
"class-string-interface.any.worker.html": true,
|
"class-string-interface.any.worker.html": true,
|
||||||
"class-string-iterator-prototype-object.any.html": [
|
"class-string-iterator-prototype-object.any.html": true,
|
||||||
"Object.prototype.toString applied after deleting @@toStringTag"
|
"class-string-iterator-prototype-object.any.worker.html": true,
|
||||||
],
|
|
||||||
"class-string-iterator-prototype-object.any.worker.html": [
|
|
||||||
"Object.prototype.toString applied after deleting @@toStringTag"
|
|
||||||
],
|
|
||||||
"class-string-named-properties-object.window.html": false,
|
"class-string-named-properties-object.window.html": false,
|
||||||
"global-immutable-prototype.any.html": [
|
"global-immutable-prototype.any.html": [
|
||||||
"Setting to a different prototype"
|
"Setting to a different prototype"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue