mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-24 20:48:55 +00:00
8ea889fccf
This CL includes several smaller changes to how executors work: * Replace BTreeMap with Slab, which should give us some small performance benefits by giving O(1) lookups and reducing memory allocations when adding new I/O operations. It also gives some improvements to readability as we no longer have to carry around "next_*" variables. Slab has no dependencies and we're already pulling it in via the futures crate. * WakerToken no longer implements Clone. * Merge pending_ops and completed_ops in URingExecutor into a single `ops` Slab and introduce an OpStatus enum that indicates whether an operation is pending or completed. This also fixes a resource leak where an operation that was canceled before completion would end up staying in completed_ops ~forever. Add a test for this leak. * Add a generation number to RingWakerState and include it in all RegisteredSources. Since a RegisteredSource can outlive the RingWakerState that created it, the generation number ensures that it will only affect the RingWakerState that created it. Add a test for this. * Poison RegisteredSource so that it doesn't implement Send or Sync. Since it's associated with a thread-local executor, sending it across thread boundaries is not ok. BUG=none TEST=unit tests Change-Id: I43dcfbb8166002995ec8773522c22fab8fb2da9e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2374885 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Chirantan Ekbote <chirantan@chromium.org>
24 lines
503 B
TOML
24 lines
503 B
TOML
[package]
|
|
name = "cros_async"
|
|
version = "0.1.0"
|
|
authors = ["The Chromium OS Authors"]
|
|
edition = "2018"
|
|
|
|
[dependencies]
|
|
io_uring = { path = "../io_uring" }
|
|
libc = "*"
|
|
paste = "*"
|
|
pin-utils = "0.1.0-alpha.4"
|
|
base = { path = "../base" }
|
|
syscall_defines = { path = "../syscall_defines" }
|
|
slab = "0.4"
|
|
|
|
[dependencies.futures]
|
|
version = "*"
|
|
default-features = false
|
|
features = ["alloc"]
|
|
|
|
[dev-dependencies]
|
|
base = { path = "../base" }
|
|
tempfile = { path = "../tempfile" }
|
|
vm_memory = { path = "../vm_memory" }
|