Skip to content

jsg rtti: move implementation types to a separate enum - #35

Merged
mikea merged 1 commit into
mainfrom
mikea/rtti-jsg-impl
Oct 3, 2022
Merged

mikea merged 1 commit into
mainfrom
mikea/rtti-jsg-impl

Conversation

@mikea

@mikea mikea commented Sep 27, 2022

Copy link
Copy Markdown
Contributor

This is what clients actually need to know if this is a built-in type or JS type.

Comment thread src/workerd/jsg/rtti.capnp Outdated
This is what clients actually need to know if this is a built-in
type or JS type.
@mikea
mikea force-pushed the mikea/rtti-jsg-impl branch from 10faa19 to 9edfb18 Compare October 3, 2022 18:17
@mikea
mikea merged commit c431c7e into main Oct 3, 2022
@mikea
mikea deleted the mikea/rtti-jsg-impl branch October 3, 2022 18:19
git-bruh added a commit that referenced this pull request Sep 15, 2026
Facet channels can outlive their parent actor container
when an alarm exceeds its execution limit.

Access times were updated by traversing raw parent pointers
resulting in a UaF, share the access time across the facet
tree instead

[ TEST ] server-test.c++:3024: Server: alarm timeout with live facet channel
workerd/api/global-scope.c++:663: NOSENTRY Alarm exceeded its allowed execution time
=================================================================
==306090==ERROR: AddressSanitizer: heap-use-after-free on address 0xfd3fae55c0b8 at pc 0xaaaabf64b1e8 bp 0xffffc5fcd010 sp 0xffffc5fcd008
READ of size 8 at 0xfd3fae55c0b8 thread T0
    #0 0xaaaabf64b1e4 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:577:20
    #1 0xaaaabf64b1d4 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:579:11
    #2 0xaaaabf64af60 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1644:23
    #3 0xaaaabf648714 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1643:41
    #4 0xaaaabf648714 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1643:41
    #5 0xaaaabf648714 in virtual thunk to workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #6 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #7 0xaaaac231c3c8 in void kj::Disposer::dispose<workerd::IoChannelFactory::SubrequestChannel>(workerd::IoChannelFactory::SubrequestChannel*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #8 0xaaaac231c3c8 in kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #9 0xaaaac231c3c8 in kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #10 0xaaaac231c3c8 in void kj::dtor<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>(kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #11 0xaaaac231c3c8 in kj::_::NullableValue<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #12 0xaaaac231c3c8 in kj::_::NullableValue<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #13 0xaaaac231c3c8 in kj::Maybe<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #14 0xaaaac231c3c8 in workerd::api::FacetOutgoingFactory::~FacetOutgoingFactory() /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor-state.c++:980:7
    #15 0xaaaac231c2e8 in kj::_::HeapDisposer<workerd::api::FacetOutgoingFactory>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #16 0xaaaac2208774 in void kj::Disposer::dispose<workerd::api::Fetcher::OutgoingFactory>(workerd::api::Fetcher::OutgoingFactory*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #17 0xaaaac2208774 in kj::Own<workerd::api::Fetcher::OutgoingFactory, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #18 0xaaaac2208774 in kj::Own<workerd::api::Fetcher::OutgoingFactory, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #19 0xaaaac2208774 in workerd::SpecificOwnedObject<workerd::api::Fetcher::OutgoingFactory>::~SpecificOwnedObject() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/io/_virtual_includes/io/workerd/io/io-own.h:70:8
    #20 0xaaaac2208774 in kj::_::HeapDisposer<workerd::SpecificOwnedObject<workerd::api::Fetcher::OutgoingFactory>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #21 0xaaaac20613f4 in void kj::Disposer::dispose<workerd::OwnedObject>(workerd::OwnedObject*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #22 0xaaaac20613f4 in kj::Own<workerd::OwnedObject, std::nullptr_t>::operator=(kj::Own<workerd::OwnedObject, std::nullptr_t>&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:373:21
    #23 0xaaaac20613f4 in kj::_::NullableValue<kj::Own<workerd::OwnedObject, std::nullptr_t>>& kj::_::NullableValue<kj::Own<workerd::OwnedObject, std::nullptr_t>>::operator=<kj::Own<workerd::OwnedObject, std::nullptr_t>>(T&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1655:13
    #24 0xaaaac20613f4 in kj::Maybe<kj::Own<workerd::OwnedObject, std::nullptr_t>>::operator=(kj::Maybe<kj::Own<workerd::OwnedObject, std::nullptr_t>>&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:2003:11
    #25 0xaaaac20609a4 in workerd::OwnedObjectList::unlink(workerd::OwnedObject&) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-own.c++:112:16
    #26 0xaaaac20609a4 in workerd::OwnedObjectList::~OwnedObjectList() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-own.c++:104:5
    #27 0xaaaac2025370 in workerd::IoContext::~IoContext() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:773:1
    #28 0xaaaac2026530 in workerd::IoContext::~IoContext() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:752:41
    #29 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #30 0xaaaac219bae8 in void kj::Disposer::dispose<workerd::IoContext>(workerd::IoContext*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #31 0xaaaac219bae8 in kj::Own<workerd::IoContext, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #32 0xaaaac219bae8 in kj::Own<workerd::IoContext, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #33 0xaaaac219bae8 in void kj::dtor<kj::Own<workerd::IoContext, std::nullptr_t>>(kj::Own<workerd::IoContext, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #34 0xaaaac219bae8 in kj::_::NullableValue<kj::Own<workerd::IoContext, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #35 0xaaaac219bae8 in kj::_::NullableValue<kj::Own<workerd::IoContext, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #36 0xaaaac219bae8 in kj::Maybe<kj::Own<workerd::IoContext, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #37 0xaaaac219bae8 in workerd::Worker::Actor::Impl::~Impl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:3887:3
    #38 0xaaaac219b4d8 in kj::_::HeapDisposer<workerd::Worker::Actor::Impl>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #39 0xaaaac20ea888 in void kj::Disposer::dispose<workerd::Worker::Actor::Impl>(workerd::Worker::Actor::Impl*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #40 0xaaaac20ea888 in kj::Own<workerd::Worker::Actor::Impl, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #41 0xaaaac20ea888 in kj::Own<workerd::Worker::Actor::Impl, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #42 0xaaaac20ea888 in workerd::Worker::Actor::~Actor() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:4069:1
    #43 0xaaaac20ead50 in workerd::Worker::Actor::~Actor() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:4064:41
    #44 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #45 0xaaaac21a3620 in void kj::Disposer::dispose<workerd::Worker::Actor>(workerd::Worker::Actor*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #46 0xaaaac21a3620 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #47 0xaaaac21a3620 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #48 0xaaaac21a3620 in kj::_::OwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #49 0xaaaac21a3620 in kj::_::DisposableOwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #50 0xaaaac21a3620 in kj::_::DisposableOwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #51 0xaaaac1fdd258 in void kj::Disposer::dispose<workerd::Worker::Actor>(workerd::Worker::Actor*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #52 0xaaaac1fdd258 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #53 0xaaaac1fdd258 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #54 0xaaaac1fdd258 in void kj::dtor<kj::Own<workerd::Worker::Actor, std::nullptr_t>>(kj::Own<workerd::Worker::Actor, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #55 0xaaaac1fdd258 in kj::_::NullableValue<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #56 0xaaaac1fdd258 in kj::_::NullableValue<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #57 0xaaaac1fdd258 in kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #58 0xaaaac1fdd258 in kj::_::OwnedBundle<kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1156:8
    #59 0xaaaac1fdd258 in kj::_::OwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #60 0xaaaac1fdd258 in kj::_::DisposableOwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #61 0xaaaac1fdd258 in kj::_::DisposableOwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #62 0xaaaac20576f4 in void kj::Disposer::dispose<workerd::IoContext_IncomingRequest>(workerd::IoContext_IncomingRequest*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #63 0xaaaac20576f4 in kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #64 0xaaaac20576f4 in kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #65 0xaaaac20576f4 in kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>::~AttachmentPromiseNode() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:470:3
    #66 0xaaaac2057668 in void kj::dtor<kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>>(kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #67 0xaaaac2057668 in void kj::_::freePromise<kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>>(kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>*) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:371:5
    #68 0xaaaac2057668 in kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:464:29
    #69 0xaaaac4370550 in kj::_::PromiseDisposer::dispose(kj::_::PromiseArenaMember*) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async-inl.h:290:11
    #70 0xaaaac4370550 in kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:590:7
    #71 0xaaaac4370550 in kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>::operator=(std::nullptr_t) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:537:5
    #72 0xaaaac4370550 in kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2438:16
    #73 0xaaaac4370550 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0>(kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #74 0xaaaac4370550 in kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2437:25
    #75 0xaaaac437c204 in kj::_::TransformPromiseNode<void, kj::Canceler::AdapterImpl<void>::AdapterImpl(kj::PromiseFulfiller<void>&, kj::Canceler&, kj::Promise<void>)::$_0, kj::Canceler::AdapterImpl<void>::AdapterImpl(kj::PromiseFulfiller<void>&, kj::Canceler&, kj::Promise<void>)::$_1>::getImpl(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async-inl.h:669:5
    #76 0xaaaac436fff8 in kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2413:5
    #77 0xaaaac436fff8 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0>(kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #78 0xaaaac436fff8 in kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2412:25
    #79 0xaaaac4379140 in kj::_::EagerPromiseNodeBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:3034:15
    #80 0xaaaac437941c in non-virtual thunk to kj::_::EagerPromiseNodeBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++
    #81 0xaaaac4368eb0 in kj::EventLoop::turn() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:1851:12
    #82 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2136:17
    #83 0xaaaac436c724 in void kj::WaitScope::runOnStackPool<kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1>(kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.h:1671:7
    #84 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2134:13
    #85 0xaaaabf42df20 in kj::Promise<void>::poll(kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:1429:10
    #86 0xaaaabf42df20 in workerd::server::(anonymous namespace)::TestServer::wait(unsigned long) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:445:26
    #87 0xaaaabf42d8e0 in workerd::server::(anonymous namespace)::TestCase3024::run() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:3098:8
    #88 0xaaaabf4ee4a4 in kj::TestRunner::run()::'lambda'()::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:271:23
    #89 0xaaaabf4ee4a4 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::TestRunner::run()::'lambda'()>(kj::TestRunner::run()::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #90 0xaaaabf4ed3cc in kj::TestRunner::run() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:269:33
    #91 0xaaaabf4ece60 in auto kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...)::operator()<kj::TestRunner>(auto&, auto&&...) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:168:49
    #92 0xaaaabf4ece60 in auto kj::_::BoundMethod<kj::TestRunner&, kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...), kj::TestRunner::getMain()::'lambda6'(auto&, auto&&...)>::operator()<>() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:263:12
    #93 0xaaaabf4ece60 in kj::Function<kj::MainBuilder::Validity ()>::Impl<kj::_::BoundMethod<kj::TestRunner&, kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...), kj::TestRunner::getMain()::'lambda6'(auto&, auto&&...)>>::operator()() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:142:14
    #94 0xaaaac43ff3b0 in kj::Function<kj::MainBuilder::Validity ()>::operator()() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:119:12
    #95 0xaaaac43ff3b0 in kj::MainBuilder::MainImpl::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:601:23
    #96 0xaaaac440bf3c in kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>::Impl<kj::MainBuilder::MainImpl>::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:142:14
    #97 0xaaaac43fa8c0 in kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:119:12
    #98 0xaaaac43fa8c0 in kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:220:7
    #99 0xaaaac43fa8c0 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0>(kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/exception.h:642:5
    #100 0xaaaac43fa314 in kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:219:27
    #101 0xaaaabf4ea2bc in main /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:332:1
    #102 0xffffaf252258  (/lib/aarch64-linux-gnu/libc.so.6+0x22258) (BuildId: 4c1eca4527d1163b2dde55860b69f270158febb4)
    #103 0xffffaf252338 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x22338) (BuildId: 4c1eca4527d1163b2dde55860b69f270158febb4)
    #104 0xaaaabf32b02c in _start (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1ddb02c)

0xfd3fae55c0b8 is located 120 bytes inside of 392-byte region [0xfd3fae55c040,0xfd3fae55c1c8)
freed by thread T0 here:
    #0 0xaaaabf409dac in operator delete(void*, unsigned long) (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1eb9dac)
    #1 0xaaaabf67e7d0 in workerd::server::Server::ActorNamespace::ActorContainer::~ActorContainer() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:522:39
    #2 0xaaaabf67e7d0 in non-virtual thunk to workerd::server::Server::ActorNamespace::ActorContainer::~ActorContainer() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #3 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #4 0xaaaabf6702f0 in void kj::Disposer::dispose<workerd::server::Server::ActorNamespace::ActorContainer>(workerd::server::Server::ActorNamespace::ActorContainer*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #5 0xaaaabf6702f0 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #6 0xaaaabf6702f0 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #7 0xaaaabf6702f0 in workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()::~() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:665:29
    #8 0xaaaabf6702f0 in void kj::dtor<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>(workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #9 0xaaaabf6702f0 in kj::_::NullableValue<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1488:7
    #10 0xaaaabf6702f0 in kj::_::NullableValue<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1374:7
    #11 0xaaaabf6702f0 in kj::Maybe<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #12 0xaaaabf6702f0 in kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::run() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:3168:3
    #13 0xaaaabf66fd08 in kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~Deferred() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:3155:5
    #14 0xaaaabf66fd08 in kj::_::OwnedBundle<kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #15 0xaaaabf66fd08 in kj::_::OwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #16 0xaaaabf66fc24 in kj::_::DisposableOwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #17 0xaaaabf66fc24 in kj::_::DisposableOwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #18 0xaaaac2fab1b4 in void kj::Disposer::dispose<workerd::WorkerInterface>(workerd::WorkerInterface*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #19 0xaaaac2fab1b4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #20 0xaaaac2fab1b4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #21 0xaaaac2fab1b4 in void kj::dtor<kj::Own<workerd::WorkerInterface, std::nullptr_t>>(kj::Own<workerd::WorkerInterface, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #22 0xaaaac2fab1b4 in kj::_::NullableValue<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #23 0xaaaac2fab1b4 in kj::_::NullableValue<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #24 0xaaaac2fab1b4 in kj::Maybe<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #25 0xaaaac2fab1b4 in workerd::(anonymous namespace)::PromisedWorkerInterface::~PromisedWorkerInterface() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker-interface.c++:20:7
    #26 0xaaaac2fab1b4 in kj::_::HeapDisposer<workerd::(anonymous namespace)::PromisedWorkerInterface>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #27 0xaaaabf708ae4 in void kj::Disposer::dispose<workerd::WorkerInterface>(workerd::WorkerInterface*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #28 0xaaaabf708ae4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #29 0xaaaabf708ae4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #30 0xaaaabf708ae4 in workerd::server::AlarmScheduler::makeAlarmTask(kj::Quantity<long, kj::_::NanosecondLabel>, workerd::server::ActorKey const&, kj::Absolute<kj::Quantity<long, kj::_::NanosecondLabel>, kj::_::DateLabel>)::$_0::operator()() const (.resume) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/alarm-scheduler.c++:212:21
    #31 0xaaaac437a468 in std::__Cr::coroutine_handle<void>::resume[abi:sqe240000]() const /proc/self/cwd/external/+v8_build_caches_ext+v8_build_cache_arm64.optdebug_asan/third_party/libc++/src/include/__coroutine/coroutine_handle.h:69:5
    #32 0xaaaac437a468 in kj::_::CoroutineBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:3157:13
    #33 0xaaaac437a468 in non-virtual thunk to kj::_::CoroutineBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++
    #34 0xaaaac4368eb0 in kj::EventLoop::turn() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:1851:12
    #35 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2136:17
    #36 0xaaaac436c724 in void kj::WaitScope::runOnStackPool<kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1>(kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.h:1671:7
    #37 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2134:13
    #38 0xaaaabf42df20 in kj::Promise<void>::poll(kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:1429:10
    #39 0xaaaabf42df20 in workerd::server::(anonymous namespace)::TestServer::wait(unsigned long) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:445:26
    #40 0xaaaabf42d8e0 in workerd::server::(anonymous namespace)::TestCase3024::run() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:3098:8
    #41 0xaaaabf4ee4a4 in kj::TestRunner::run()::'lambda'()::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:271:23
    #42 0xaaaabf4ee4a4 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::TestRunner::run()::'lambda'()>(kj::TestRunner::run()::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #43 0xaaaabf4ed3cc in kj::TestRunner::run() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:269:33

previously allocated by thread T0 here:
    #0 0xaaaabf40913c in operator new(unsigned long) (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1eb913c)
    #1 0xaaaabf679d74 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t> kj::refcounted<workerd::server::Server::ActorNamespace::ActorContainer, kj::String, workerd::server::Server::ActorNamespace&, kj::None const&, workerd::server::Server::ActorNamespace::ActorContainer::ClassAndId, kj::Timer&>(kj::String&&, workerd::server::Server::ActorNamespace&, kj::None const&, workerd::server::Server::ActorNamespace::ActorContainer::ClassAndId&&, kj::Timer&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/refcount.h:176:15
    #2 0xaaaabf678e2c in workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()::operator()() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1418:24
    #3 0xaaaabf67831c in kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry& kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>::FindOrCreateImpl<workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'(), kj::String&>::apply<0ul>(kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>&, kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/table.h:620:37
    #4 0xaaaabf646ec8 in kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry& kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>::findOrCreate<0ul, kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()>(kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/table.h:657:10
    #5 0xaaaabf646ec8 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>& kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::findOrCreate<kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()>(kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/map.h:386:16
    #6 0xaaaabf646ec8 in workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1417:10
    #7 0xaaaabf5c8194 in workerd::server::Server::ActorNamespace::getActorChannel(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:455:45
    #8 0xaaaabf5db6d4 in workerd::server::Server::WorkerService::getGlobalActor(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:4417:15
    #9 0xaaaabf5dfe4c in non-virtual thunk to workerd::server::Server::WorkerService::getGlobalActor(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #10 0xaaaac2203cb4 in workerd::IoContext::getGlobalActorChannel(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/io/_virtual_includes/io/workerd/io/io-context.h:1073:34
    #11 0xaaaac21f2604 in workerd::api::GlobalActorOutgoingFactory::getOrCreateActorChannel(workerd::IoContext&, workerd::SpanParent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:93:21
    #12 0xaaaac2200644 in workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) const /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:142:12
    #13 0xaaaac2200644 in kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>::Wrapper<workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0>::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/function.h:245:14
    #14 0xaaaac202ca88 in kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/function.h:228:12
    #15 0xaaaac202ca88 in workerd::IoContext::getSubrequestNoChecks(kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>, workerd::IoContext::SubrequestOptions, workerd::CountSubrequest) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:1092:11
    #16 0xaaaac202dfd0 in workerd::IoContext::getSubrequest(kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>, workerd::IoContext::SubrequestOptions) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:1123:10
    #17 0xaaaac21f3cd4 in kj::Own<workerd::WorkerInterface, std::nullptr_t> workerd::api::(anonymous namespace)::startActorSubrequest<workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0>(workerd::IoContext&, workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0&, workerd::CountSubrequest) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:34:17
    #18 0xaaaac21f3cd4 in workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:148:17
    #19 0xaaaac21f38c8 in workerd::api::GlobalActorOutgoingFactory::newSingleUseClient(kj::Maybe<kj::String>, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:115:10

SUMMARY: AddressSanitizer: heap-use-after-free /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:577:20 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime()
Shadow bytes around the buggy address:
  0xfd3fae55be00: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0xfd3fae55be80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55bf00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55bf80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c000: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0xfd3fae55c080: fd fd fd fd fd fd fd[fd]fd fd fd fd fd fd fd fd
  0xfd3fae55c100: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c180: fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa
  0xfd3fae55c200: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0xfd3fae55c280: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c300: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==306090==ABORTING
*** Received signal #6: Aborted
stack: linux-vdso.so.1@0x5bb /lib/aarch64-linux-gnu/libc.so.6@0x87d7f /lib/aarch64-linux-gnu/libc.so.6@0x3693f /lib/aarch64-linux-gnu/libc.so.6@0x21a83 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1ea1a37 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1ea00cf ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e870d7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e88f87 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e8a39b ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20fb1e7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20fb1d7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20faf63 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20f8717 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4dcc3cb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4dcc2eb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4cb8777 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b113f7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b109a7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4ad5373 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4ad6533 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c4baeb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c4b4db ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b9a88b ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b9ad53 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c53623 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4a8d25b
(08:03:51) FAIL: @@+local_repository+workerd//src/workerd/server:server-test@ (Exit 1) (see /root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/testlogs/external/+local_repository+workerd/src/workerd/server/server-test@/test.log)
(08:03:51) INFO: Found 1 test target...
Target @@+local_repository+workerd//src/workerd/server:server-test@ up-to-date:
  bazel-bin/external/+local_repository+workerd/src/workerd/server/server-test@
(08:03:51) INFO: Elapsed time: 8.041s, Critical Path: 7.10s
(08:03:51) INFO: 5 processes: 16 action cache hit, 2 disk cache hit, 2 internal, 2 processwrapper-sandbox.
(08:03:51) INFO: Build completed, 1 test FAILED, 5 total actions
@workerd//src/workerd/server:server-test@                                FAILED in 1.5s
  /root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/testlogs/external/+local_repository+workerd/src/workerd/server/server-test@/test.log
git-bruh added a commit that referenced this pull request Sep 15, 2026
Facet channels can outlive their parent actor container
when an alarm exceeds its execution limit.

Access times were updated by traversing raw parent pointers
resulting in a UaF, share the access time across the facet
tree instead

[ TEST ] server-test.c++:3024: Server: alarm timeout with live facet channel
workerd/api/global-scope.c++:663: NOSENTRY Alarm exceeded its allowed execution time
=================================================================
==306090==ERROR: AddressSanitizer: heap-use-after-free on address 0xfd3fae55c0b8 at pc 0xaaaabf64b1e8 bp 0xffffc5fcd010 sp 0xffffc5fcd008
READ of size 8 at 0xfd3fae55c0b8 thread T0
    #0 0xaaaabf64b1e4 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:577:20
    #1 0xaaaabf64b1d4 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:579:11
    #2 0xaaaabf64af60 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1644:23
    #3 0xaaaabf648714 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1643:41
    #4 0xaaaabf648714 in workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1643:41
    #5 0xaaaabf648714 in virtual thunk to workerd::server::Server::ActorNamespace::ActorChannelImpl::~ActorChannelImpl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #6 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #7 0xaaaac231c3c8 in void kj::Disposer::dispose<workerd::IoChannelFactory::SubrequestChannel>(workerd::IoChannelFactory::SubrequestChannel*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #8 0xaaaac231c3c8 in kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #9 0xaaaac231c3c8 in kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #10 0xaaaac231c3c8 in void kj::dtor<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>(kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #11 0xaaaac231c3c8 in kj::_::NullableValue<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #12 0xaaaac231c3c8 in kj::_::NullableValue<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #13 0xaaaac231c3c8 in kj::Maybe<kj::Own<workerd::IoChannelFactory::SubrequestChannel, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #14 0xaaaac231c3c8 in workerd::api::FacetOutgoingFactory::~FacetOutgoingFactory() /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor-state.c++:980:7
    #15 0xaaaac231c2e8 in kj::_::HeapDisposer<workerd::api::FacetOutgoingFactory>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #16 0xaaaac2208774 in void kj::Disposer::dispose<workerd::api::Fetcher::OutgoingFactory>(workerd::api::Fetcher::OutgoingFactory*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #17 0xaaaac2208774 in kj::Own<workerd::api::Fetcher::OutgoingFactory, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #18 0xaaaac2208774 in kj::Own<workerd::api::Fetcher::OutgoingFactory, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #19 0xaaaac2208774 in workerd::SpecificOwnedObject<workerd::api::Fetcher::OutgoingFactory>::~SpecificOwnedObject() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/io/_virtual_includes/io/workerd/io/io-own.h:70:8
    #20 0xaaaac2208774 in kj::_::HeapDisposer<workerd::SpecificOwnedObject<workerd::api::Fetcher::OutgoingFactory>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #21 0xaaaac20613f4 in void kj::Disposer::dispose<workerd::OwnedObject>(workerd::OwnedObject*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #22 0xaaaac20613f4 in kj::Own<workerd::OwnedObject, std::nullptr_t>::operator=(kj::Own<workerd::OwnedObject, std::nullptr_t>&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:373:21
    #23 0xaaaac20613f4 in kj::_::NullableValue<kj::Own<workerd::OwnedObject, std::nullptr_t>>& kj::_::NullableValue<kj::Own<workerd::OwnedObject, std::nullptr_t>>::operator=<kj::Own<workerd::OwnedObject, std::nullptr_t>>(T&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1655:13
    #24 0xaaaac20613f4 in kj::Maybe<kj::Own<workerd::OwnedObject, std::nullptr_t>>::operator=(kj::Maybe<kj::Own<workerd::OwnedObject, std::nullptr_t>>&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:2003:11
    #25 0xaaaac20609a4 in workerd::OwnedObjectList::unlink(workerd::OwnedObject&) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-own.c++:112:16
    #26 0xaaaac20609a4 in workerd::OwnedObjectList::~OwnedObjectList() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-own.c++:104:5
    #27 0xaaaac2025370 in workerd::IoContext::~IoContext() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:773:1
    #28 0xaaaac2026530 in workerd::IoContext::~IoContext() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:752:41
    #29 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #30 0xaaaac219bae8 in void kj::Disposer::dispose<workerd::IoContext>(workerd::IoContext*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #31 0xaaaac219bae8 in kj::Own<workerd::IoContext, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #32 0xaaaac219bae8 in kj::Own<workerd::IoContext, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #33 0xaaaac219bae8 in void kj::dtor<kj::Own<workerd::IoContext, std::nullptr_t>>(kj::Own<workerd::IoContext, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #34 0xaaaac219bae8 in kj::_::NullableValue<kj::Own<workerd::IoContext, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #35 0xaaaac219bae8 in kj::_::NullableValue<kj::Own<workerd::IoContext, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #36 0xaaaac219bae8 in kj::Maybe<kj::Own<workerd::IoContext, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #37 0xaaaac219bae8 in workerd::Worker::Actor::Impl::~Impl() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:3887:3
    #38 0xaaaac219b4d8 in kj::_::HeapDisposer<workerd::Worker::Actor::Impl>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #39 0xaaaac20ea888 in void kj::Disposer::dispose<workerd::Worker::Actor::Impl>(workerd::Worker::Actor::Impl*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #40 0xaaaac20ea888 in kj::Own<workerd::Worker::Actor::Impl, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #41 0xaaaac20ea888 in kj::Own<workerd::Worker::Actor::Impl, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #42 0xaaaac20ea888 in workerd::Worker::Actor::~Actor() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:4069:1
    #43 0xaaaac20ead50 in workerd::Worker::Actor::~Actor() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker.c++:4064:41
    #44 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #45 0xaaaac21a3620 in void kj::Disposer::dispose<workerd::Worker::Actor>(workerd::Worker::Actor*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #46 0xaaaac21a3620 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #47 0xaaaac21a3620 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #48 0xaaaac21a3620 in kj::_::OwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #49 0xaaaac21a3620 in kj::_::DisposableOwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #50 0xaaaac21a3620 in kj::_::DisposableOwnedBundle<kj::Own<workerd::Worker::Actor, std::nullptr_t>, workerd::RequestTracker::ActiveRequest>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #51 0xaaaac1fdd258 in void kj::Disposer::dispose<workerd::Worker::Actor>(workerd::Worker::Actor*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #52 0xaaaac1fdd258 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #53 0xaaaac1fdd258 in kj::Own<workerd::Worker::Actor, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #54 0xaaaac1fdd258 in void kj::dtor<kj::Own<workerd::Worker::Actor, std::nullptr_t>>(kj::Own<workerd::Worker::Actor, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #55 0xaaaac1fdd258 in kj::_::NullableValue<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #56 0xaaaac1fdd258 in kj::_::NullableValue<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #57 0xaaaac1fdd258 in kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #58 0xaaaac1fdd258 in kj::_::OwnedBundle<kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1156:8
    #59 0xaaaac1fdd258 in kj::_::OwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #60 0xaaaac1fdd258 in kj::_::DisposableOwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #61 0xaaaac1fdd258 in kj::_::DisposableOwnedBundle<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>, kj::Maybe<kj::Own<workerd::Worker::Actor, std::nullptr_t>>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #62 0xaaaac20576f4 in void kj::Disposer::dispose<workerd::IoContext_IncomingRequest>(workerd::IoContext_IncomingRequest*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1143:5
    #63 0xaaaac20576f4 in kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #64 0xaaaac20576f4 in kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #65 0xaaaac20576f4 in kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>::~AttachmentPromiseNode() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:470:3
    #66 0xaaaac2057668 in void kj::dtor<kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>>(kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #67 0xaaaac2057668 in void kj::_::freePromise<kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>>(kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>*) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:371:5
    #68 0xaaaac2057668 in kj::_::AttachmentPromiseNode<kj::Own<workerd::IoContext_IncomingRequest, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:464:29
    #69 0xaaaac4370550 in kj::_::PromiseDisposer::dispose(kj::_::PromiseArenaMember*) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async-inl.h:290:11
    #70 0xaaaac4370550 in kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:590:7
    #71 0xaaaac4370550 in kj::Own<kj::_::PromiseNode, kj::_::PromiseDisposer>::operator=(std::nullptr_t) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:537:5
    #72 0xaaaac4370550 in kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2438:16
    #73 0xaaaac4370550 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0>(kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&)::$_0&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #74 0xaaaac4370550 in kj::_::TransformPromiseNodeBase::getDepResult(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2437:25
    #75 0xaaaac437c204 in kj::_::TransformPromiseNode<void, kj::Canceler::AdapterImpl<void>::AdapterImpl(kj::PromiseFulfiller<void>&, kj::Canceler&, kj::Promise<void>)::$_0, kj::Canceler::AdapterImpl<void>::AdapterImpl(kj::PromiseFulfiller<void>&, kj::Canceler&, kj::Promise<void>)::$_1>::getImpl(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async-inl.h:669:5
    #76 0xaaaac436fff8 in kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2413:5
    #77 0xaaaac436fff8 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0>(kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_0&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #78 0xaaaac436fff8 in kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2412:25
    #79 0xaaaac4379140 in kj::_::EagerPromiseNodeBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:3034:15
    #80 0xaaaac437941c in non-virtual thunk to kj::_::EagerPromiseNodeBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++
    #81 0xaaaac4368eb0 in kj::EventLoop::turn() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:1851:12
    #82 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2136:17
    #83 0xaaaac436c724 in void kj::WaitScope::runOnStackPool<kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1>(kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.h:1671:7
    #84 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2134:13
    #85 0xaaaabf42df20 in kj::Promise<void>::poll(kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:1429:10
    #86 0xaaaabf42df20 in workerd::server::(anonymous namespace)::TestServer::wait(unsigned long) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:445:26
    #87 0xaaaabf42d8e0 in workerd::server::(anonymous namespace)::TestCase3024::run() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:3098:8
    #88 0xaaaabf4ee4a4 in kj::TestRunner::run()::'lambda'()::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:271:23
    #89 0xaaaabf4ee4a4 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::TestRunner::run()::'lambda'()>(kj::TestRunner::run()::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #90 0xaaaabf4ed3cc in kj::TestRunner::run() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:269:33
    #91 0xaaaabf4ece60 in auto kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...)::operator()<kj::TestRunner>(auto&, auto&&...) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:168:49
    #92 0xaaaabf4ece60 in auto kj::_::BoundMethod<kj::TestRunner&, kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...), kj::TestRunner::getMain()::'lambda6'(auto&, auto&&...)>::operator()<>() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:263:12
    #93 0xaaaabf4ece60 in kj::Function<kj::MainBuilder::Validity ()>::Impl<kj::_::BoundMethod<kj::TestRunner&, kj::TestRunner::getMain()::'lambda5'(auto&, auto&&...), kj::TestRunner::getMain()::'lambda6'(auto&, auto&&...)>>::operator()() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:142:14
    #94 0xaaaac43ff3b0 in kj::Function<kj::MainBuilder::Validity ()>::operator()() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:119:12
    #95 0xaaaac43ff3b0 in kj::MainBuilder::MainImpl::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:601:23
    #96 0xaaaac440bf3c in kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>::Impl<kj::MainBuilder::MainImpl>::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:142:14
    #97 0xaaaac43fa8c0 in kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>::operator()(kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/function.h:119:12
    #98 0xaaaac43fa8c0 in kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:220:7
    #99 0xaaaac43fa8c0 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0>(kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**)::$_0&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/exception.h:642:5
    #100 0xaaaac43fa314 in kj::runMainAndExit(kj::ProcessContext&, kj::Function<void (kj::StringPtr, kj::ArrayPtr<kj::StringPtr const>)>&&, int, char**) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/main.c++:219:27
    #101 0xaaaabf4ea2bc in main /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:332:1
    #102 0xffffaf252258  (/lib/aarch64-linux-gnu/libc.so.6+0x22258) (BuildId: 4c1eca4527d1163b2dde55860b69f270158febb4)
    #103 0xffffaf252338 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x22338) (BuildId: 4c1eca4527d1163b2dde55860b69f270158febb4)
    #104 0xaaaabf32b02c in _start (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1ddb02c)

0xfd3fae55c0b8 is located 120 bytes inside of 392-byte region [0xfd3fae55c040,0xfd3fae55c1c8)
freed by thread T0 here:
    #0 0xaaaabf409dac in operator delete(void*, unsigned long) (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1eb9dac)
    #1 0xaaaabf67e7d0 in workerd::server::Server::ActorNamespace::ActorContainer::~ActorContainer() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:522:39
    #2 0xaaaabf67e7d0 in non-virtual thunk to workerd::server::Server::ActorNamespace::ActorContainer::~ActorContainer() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #3 0xaaaac44111c0 in kj::Refcounted::disposeImpl(void*) const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/refcount.c++:68:5
    #4 0xaaaabf6702f0 in void kj::Disposer::dispose<workerd::server::Server::ActorNamespace::ActorContainer>(workerd::server::Server::ActorNamespace::ActorContainer*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #5 0xaaaabf6702f0 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #6 0xaaaabf6702f0 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #7 0xaaaabf6702f0 in workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()::~() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:665:29
    #8 0xaaaabf6702f0 in void kj::dtor<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>(workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #9 0xaaaabf6702f0 in kj::_::NullableValue<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1488:7
    #10 0xaaaabf6702f0 in kj::_::NullableValue<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1374:7
    #11 0xaaaabf6702f0 in kj::Maybe<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #12 0xaaaabf6702f0 in kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::run() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:3168:3
    #13 0xaaaabf66fd08 in kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>::~Deferred() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:3155:5
    #14 0xaaaabf66fd08 in kj::_::OwnedBundle<kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #15 0xaaaabf66fd08 in kj::_::OwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~OwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1150:8
    #16 0xaaaabf66fc24 in kj::_::DisposableOwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::~DisposableOwnedBundle() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1167:8
    #17 0xaaaabf66fc24 in kj::_::DisposableOwnedBundle<kj::Own<workerd::WorkerInterface, std::nullptr_t>, kj::_::Deferred<workerd::server::Server::ActorNamespace::ActorContainer::startRequest(workerd::IoChannelFactory::SubrequestMetadata)::'lambda'()>>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1169:52
    #18 0xaaaac2fab1b4 in void kj::Disposer::dispose<workerd::WorkerInterface>(workerd::WorkerInterface*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #19 0xaaaac2fab1b4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #20 0xaaaac2fab1b4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #21 0xaaaac2fab1b4 in void kj::dtor<kj::Own<workerd::WorkerInterface, std::nullptr_t>>(kj::Own<workerd::WorkerInterface, std::nullptr_t>&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1092:13
    #22 0xaaaac2fab1b4 in kj::_::NullableValue<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::destroy() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1688:9
    #23 0xaaaac2fab1b4 in kj::_::NullableValue<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::~NullableValue() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1587:7
    #24 0xaaaac2fab1b4 in kj::Maybe<kj::Own<workerd::WorkerInterface, std::nullptr_t>>::~Maybe() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/common.h:1872:7
    #25 0xaaaac2fab1b4 in workerd::(anonymous namespace)::PromisedWorkerInterface::~PromisedWorkerInterface() /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/worker-interface.c++:20:7
    #26 0xaaaac2fab1b4 in kj::_::HeapDisposer<workerd::(anonymous namespace)::PromisedWorkerInterface>::disposeImpl(void*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:634:60
    #27 0xaaaabf708ae4 in void kj::Disposer::dispose<workerd::WorkerInterface>(workerd::WorkerInterface*) const /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:1141:5
    #28 0xaaaabf708ae4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::dispose() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:458:17
    #29 0xaaaabf708ae4 in kj::Own<workerd::WorkerInterface, std::nullptr_t>::~Own() /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/memory.h:360:28
    #30 0xaaaabf708ae4 in workerd::server::AlarmScheduler::makeAlarmTask(kj::Quantity<long, kj::_::NanosecondLabel>, workerd::server::ActorKey const&, kj::Absolute<kj::Quantity<long, kj::_::NanosecondLabel>, kj::_::DateLabel>)::$_0::operator()() const (.resume) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/alarm-scheduler.c++:212:21
    #31 0xaaaac437a468 in std::__Cr::coroutine_handle<void>::resume[abi:sqe240000]() const /proc/self/cwd/external/+v8_build_caches_ext+v8_build_cache_arm64.optdebug_asan/third_party/libc++/src/include/__coroutine/coroutine_handle.h:69:5
    #32 0xaaaac437a468 in kj::_::CoroutineBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:3157:13
    #33 0xaaaac437a468 in non-virtual thunk to kj::_::CoroutineBase::fire() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++
    #34 0xaaaac4368eb0 in kj::EventLoop::turn() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:1851:12
    #35 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2136:17
    #36 0xaaaac436c724 in void kj::WaitScope::runOnStackPool<kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1>(kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation)::$_1&&) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.h:1671:7
    #37 0xaaaac436c724 in kj::_::pollImpl(kj::_::PromiseNode&, kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/async.c++:2134:13
    #38 0xaaaabf42df20 in kj::Promise<void>::poll(kj::WaitScope&, kj::SourceLocation) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj-async-core/kj/async-inl.h:1429:10
    #39 0xaaaabf42df20 in workerd::server::(anonymous namespace)::TestServer::wait(unsigned long) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:445:26
    #40 0xaaaabf42d8e0 in workerd::server::(anonymous namespace)::TestCase3024::run() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server-test.c++:3098:8
    #41 0xaaaabf4ee4a4 in kj::TestRunner::run()::'lambda'()::operator()() const /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:271:23
    #42 0xaaaabf4ee4a4 in kj::Maybe<kj::Exception> kj::runCatchingExceptions<kj::TestRunner::run()::'lambda'()>(kj::TestRunner::run()::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/exception.h:642:5
    #43 0xaaaabf4ed3cc in kj::TestRunner::run() /proc/self/cwd/external/+local_repository+capnp-cpp/src/kj/test.c++:269:33

previously allocated by thread T0 here:
    #0 0xaaaabf40913c in operator new(unsigned long) (/root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/server/server-test_binary+0x1eb913c)
    #1 0xaaaabf679d74 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t> kj::refcounted<workerd::server::Server::ActorNamespace::ActorContainer, kj::String, workerd::server::Server::ActorNamespace&, kj::None const&, workerd::server::Server::ActorNamespace::ActorContainer::ClassAndId, kj::Timer&>(kj::String&&, workerd::server::Server::ActorNamespace&, kj::None const&, workerd::server::Server::ActorNamespace::ActorContainer::ClassAndId&&, kj::Timer&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/refcount.h:176:15
    #2 0xaaaabf678e2c in workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()::operator()() /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1418:24
    #3 0xaaaabf67831c in kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry& kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>::FindOrCreateImpl<workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'(), kj::String&>::apply<0ul>(kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>&, kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/table.h:620:37
    #4 0xaaaabf646ec8 in kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry& kj::Table<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Entry, kj::HashIndex<kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::Callbacks>>::findOrCreate<0ul, kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()>(kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/table.h:657:10
    #5 0xaaaabf646ec8 in kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>& kj::HashMap<kj::StringPtr, kj::Own<workerd::server::Server::ActorNamespace::ActorContainer, std::nullptr_t>>::findOrCreate<kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()>(kj::String&, workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>)::'lambda'()&&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/map.h:386:16
    #6 0xaaaabf646ec8 in workerd::server::Server::ActorNamespace::getActorContainer(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:1417:10
    #7 0xaaaabf5c8194 in workerd::server::Server::ActorNamespace::getActorChannel(kj::OneOf<kj::Own<workerd::ActorIdFactory::ActorId, std::nullptr_t>, kj::String>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:455:45
    #8 0xaaaabf5db6d4 in workerd::server::Server::WorkerService::getGlobalActor(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:4417:15
    #9 0xaaaabf5dfe4c in non-virtual thunk to workerd::server::Server::WorkerService::getGlobalActor(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++
    #10 0xaaaac2203cb4 in workerd::IoContext::getGlobalActorChannel(unsigned int, workerd::ActorIdFactory::ActorId const&, kj::Maybe<kj::String>, workerd::ActorGetMode, bool, workerd::ActorRoutingMode, workerd::SpanParent, kj::Maybe<workerd::ActorVersion>, workerd::Persistent) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+workerd/src/workerd/io/_virtual_includes/io/workerd/io/io-context.h:1073:34
    #11 0xaaaac21f2604 in workerd::api::GlobalActorOutgoingFactory::getOrCreateActorChannel(workerd::IoContext&, workerd::SpanParent) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:93:21
    #12 0xaaaac2200644 in workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) const /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:142:12
    #13 0xaaaac2200644 in kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>::Wrapper<workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0>::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/function.h:245:14
    #14 0xaaaac202ca88 in kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>::operator()(workerd::TraceContext&, workerd::IoChannelFactory&) /proc/self/cwd/bazel-out/aarch64-dbg/bin/external/+local_repository+capnp-cpp/src/kj/_virtual_includes/kj/kj/function.h:228:12
    #15 0xaaaac202ca88 in workerd::IoContext::getSubrequestNoChecks(kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>, workerd::IoContext::SubrequestOptions, workerd::CountSubrequest) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:1092:11
    #16 0xaaaac202dfd0 in workerd::IoContext::getSubrequest(kj::FunctionParam<kj::Own<workerd::WorkerInterface, std::nullptr_t> (workerd::TraceContext&, workerd::IoChannelFactory&)>, workerd::IoContext::SubrequestOptions) /proc/self/cwd/external/+local_repository+workerd/src/workerd/io/io-context.c++:1123:10
    #17 0xaaaac21f3cd4 in kj::Own<workerd::WorkerInterface, std::nullptr_t> workerd::api::(anonymous namespace)::startActorSubrequest<workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0>(workerd::IoContext&, workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>)::$_0&, workerd::CountSubrequest) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:34:17
    #18 0xaaaac21f3cd4 in workerd::api::GlobalActorOutgoingFactory::newActorCallAttempt(kj::Maybe<kj::String>, workerd::api::ActorCallRetryState::Attempt, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:148:17
    #19 0xaaaac21f38c8 in workerd::api::GlobalActorOutgoingFactory::newSingleUseClient(kj::Maybe<kj::String>, kj::FunctionParam<kj::Maybe<workerd::SpanParent> (workerd::TraceContext&)>) /proc/self/cwd/external/+local_repository+workerd/src/workerd/api/actor.c++:115:10

SUMMARY: AddressSanitizer: heap-use-after-free /proc/self/cwd/external/+local_repository+workerd/src/workerd/server/server.c++:577:20 in workerd::server::Server::ActorNamespace::ActorContainer::updateAccessTime()
Shadow bytes around the buggy address:
  0xfd3fae55be00: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0xfd3fae55be80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55bf00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55bf80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c000: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
=>0xfd3fae55c080: fd fd fd fd fd fd fd[fd]fd fd fd fd fd fd fd fd
  0xfd3fae55c100: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c180: fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa
  0xfd3fae55c200: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0xfd3fae55c280: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0xfd3fae55c300: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==306090==ABORTING
*** Received signal #6: Aborted
stack: linux-vdso.so.1@0x5bb /lib/aarch64-linux-gnu/libc.so.6@0x87d7f /lib/aarch64-linux-gnu/libc.so.6@0x3693f /lib/aarch64-linux-gnu/libc.so.6@0x21a83 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1ea1a37 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1ea00cf ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e870d7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e88f87 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x1e8a39b ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20fb1e7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20fb1d7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20faf63 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x20f8717 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4dcc3cb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4dcc2eb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4cb8777 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b113f7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b109a7 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4ad5373 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4ad6533 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c4baeb ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c4b4db ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b9a88b ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4b9ad53 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x6ec11c3 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4c53623 ../+local_repository+workerd/src/workerd/server/server-test_binary@0x4a8d25b
(08:03:51) FAIL: @@+local_repository+workerd//src/workerd/server:server-test@ (Exit 1) (see /root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/testlogs/external/+local_repository+workerd/src/workerd/server/server-test@/test.log)
(08:03:51) INFO: Found 1 test target...
Target @@+local_repository+workerd//src/workerd/server:server-test@ up-to-date:
  bazel-bin/external/+local_repository+workerd/src/workerd/server/server-test@
(08:03:51) INFO: Elapsed time: 8.041s, Critical Path: 7.10s
(08:03:51) INFO: 5 processes: 16 action cache hit, 2 disk cache hit, 2 internal, 2 processwrapper-sandbox.
(08:03:51) INFO: Build completed, 1 test FAILED, 5 total actions
@workerd//src/workerd/server:server-test@                                FAILED in 1.5s
  /root/.cache/bazel/_bazel_root/d299504cc034fbe43b2ea92b28f3b189/execroot/_main/bazel-out/aarch64-dbg/testlogs/external/+local_repository+workerd/src/workerd/server/server-test@/test.log
jasnell added a commit that referenced this pull request Oct 13, 2026
Pin the values each implementation accepts as a byte source's or a
transformer's expectedLength, and as a FixedLengthStream length,
ahead of consolidating the TypeScript conversions.

- readable-byte/expected-length.js (ledger #35) and
  transform/expected-length.js (ledger #21) assert the accepted and
  rejected values, coercion and range. They observe the converted
  length as the Content-Length of a fetch body.
- identity/construction.js adds -0.5, Infinity, wrong types, null,
  true, a valueOf object, and the strategy being read before the
  2^53 - 1 cap.

The pins record today's divergences. C++ converts the value as any
uint64_t: ToNumber, truncation, and TypeError for every failure.
TypeScript accepts only bigints and integral numbers, and throws a
RangeError for some values.
jasnell added a commit that referenced this pull request Oct 13, 2026
The TypeScript streams had three expectedLength conversions running
two algorithms, and none matched the C++ implementation. Replace
them with one normalizeExpectedLength in webstreams/common.ts, which
converts as JSG converts a uint64_t: a bigint must fit in a uint64;
anything else goes through ToNumber, must be finite and
non-negative, and is truncated; every failure is a TypeError. The
one difference is the number 2 ** 64: C++ lets it through to an
undefined cast, and TypeScript rejects it.

FixedLengthStream converts its length the same way. After its
strategy converts, it applies C++'s 2^53 - 1 cap with C++'s message,
in C++'s order.

Flip the pins to parity (readable-byte #35, transform #21, identity
#1-3). A TypeScript-only draining-reader test passed a 2^53 + 1
length to FixedLengthStream; it now uses 2^53 - 1. The check that a
bigint above 2^53 passes through exactly moves to the readable-byte
suite, where byte sources accept the whole uint64 range.

typescript_implemented_streams is experimental, so this needs no
compatibility flag.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants