Repository navigation
Add --experimental CLI flag, require it to enable experimental features. - #21
Merged
Merged
Conversation
Specifically, the following features are considered experimental: - Ephemeral objects (fka "colo-local actors"). - Any compatibility flag that doesn't have a default-on date assigned. We could consider creating a separate `$experimental` or `$stable` annotation instead of using presence/absence of a date, but I wanted to be cautious for now. (Incidentally, though, it looks like we should go ahead and assign dates to most of the flags that don't have them?) I decided to use a CLI flag rather than a config flag in order to add resistance against using this in production, but we can consider finer-grained control if it proves warranted.
jasnell
approved these changes
Sep 25, 2022
This was referenced Mar 1, 2026
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
Sep 21, 2026
…tion fails Body consumption (text/arrayBuffer/bytes/json on a TypeScript stream) kept every drained chunk as its own Uint8Array view until the end, so a body of many tiny chunks cost a view and an ArrayBuffer per chunk on the JS heap: 3M one-byte chunks under a 160 MB heap ended in a V8 fatal OOM and a process abort, where C++ completes. A consumer-side failure (a non-byte chunk, the memory limit) rejected the consumer but left the stream readable and pulling, its source never told; C++ cancels the source with the error. And with expectedLength folded into the limit, exceeding a declared length reported "Stream exceeded the maximum allowed limit of N bytes". The bytes are now copied out of each chunk into blocks that grow geometrically from the first chunk's size to 1 MiB, so nothing is retained per chunk and the slack is bounded: the 3M-chunk body completes in 14 s at 89 MiB peak RSS (C++: 63 s, 561 MiB). Blocks rather than a doubling buffer because backing stores are zero-filled eagerly here (tcmalloc calloc; the V8 sandbox is not built), so capacity is paid in RSS, and a doubling buffer would hold up to twice the body. A declared length that fits one block is allocated whole, so a Content-Length body that meets it fills exactly one block and arrayBuffer() hands that block over without a copy. text() decodes the blocks in one streaming pass. Tiny-chunk shapes run 1.5-2x faster; the rest is unchanged. A failure now cancels the stream through the draining reader with the error before rejecting, and a cancel that rejects replaces the error, as in the C++ AllReader. The stream stays locked, as in C++. The two bounds are told apart: the memory limit rejects with C++'s "TypeError: Memory limit exceeded before EOF.", and a declared expectedLength exceeded with "RangeError: stream delivered more bytes than its declared expectedLength". The declaration is enforced at consumption for TransformStream readables only (byte and native sources already enforce it at delivery); C++ returns everything there, recorded as readable ledger #21. Pinned in the readable suite (integration-body-failures.js: every consumer cancels the source with the error and leaves the stream locked, a rejecting cancel wins, nothing to cancel in the closing batch, the expectedLength divergence; integration-body-memory.js: chunk buffers are collectible mid-consumption, odd chunk sizes assemble exactly, a declared-length body is exact) and in js-readable-stream-test.c++ (an explicit limit rejects with the C++ message and reaches the source's cancel()). The encoding suite's decoderReadableAsBodyRejectsText now expects the cancel to reach the TransformStream's writable in TypeScript, as it does in C++ under pedantic_wpt.
jasnell
added a commit
that referenced
this pull request
Sep 21, 2026
…tion fails Body consumption (text/arrayBuffer/bytes/json on a TypeScript stream) kept every drained chunk as its own Uint8Array view until the end, so a body of many tiny chunks cost a view and an ArrayBuffer per chunk on the JS heap: 3M one-byte chunks under a 160 MB heap ended in a V8 fatal OOM and a process abort, where C++ completes. A consumer-side failure (a non-byte chunk, the memory limit) rejected the consumer but left the stream readable and pulling, its source never told; C++ cancels the source with the error. And with expectedLength folded into the limit, exceeding a declared length reported "Stream exceeded the maximum allowed limit of N bytes". The bytes are now copied out of each chunk into blocks that grow geometrically from the first chunk's size to 1 MiB, so nothing is retained per chunk and the slack is bounded: the 3M-chunk body completes in 14 s at 89 MiB peak RSS (C++: 63 s, 561 MiB). Blocks rather than a doubling buffer because backing stores are zero-filled eagerly here (tcmalloc calloc; the V8 sandbox is not built), so capacity is paid in RSS, and a doubling buffer would hold up to twice the body. A declared length that fits one block is allocated whole, so a Content-Length body that meets it fills exactly one block and arrayBuffer() hands that block over without a copy. text() decodes the blocks in one streaming pass. Tiny-chunk shapes run 1.5-2x faster; the rest is unchanged. A failure now cancels the stream through the draining reader with the error before rejecting, and a cancel that rejects replaces the error, as in the C++ AllReader. The stream stays locked, as in C++. The two bounds are told apart: the memory limit rejects with C++'s "TypeError: Memory limit exceeded before EOF.", and a declared expectedLength exceeded with "RangeError: stream delivered more bytes than its declared expectedLength". The declaration is enforced at consumption for TransformStream readables only (byte and native sources already enforce it at delivery); C++ returns everything there, recorded as readable ledger #21. Pinned in the readable suite (integration-body-failures.js: every consumer cancels the source with the error and leaves the stream locked, a rejecting cancel wins, nothing to cancel in the closing batch, the expectedLength divergence; integration-body-memory.js: chunk buffers are collectible mid-consumption, odd chunk sizes assemble exactly, a declared-length body is exact) and in js-readable-stream-test.c++ (an explicit limit rejects with the C++ message and reaches the source's cancel()). The encoding suite's decoderReadableAsBodyRejectsText now expects the cancel to reach the TransformStream's writable in TypeScript, as it does in C++ under pedantic_wpt.
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.
jasnell
added a commit
that referenced
this pull request
Oct 28, 2026
Under typescript_implemented_streams, the default controller ignored the expectedLength its underlying source declared: only byte sources, a TransformStream's readable (through an internal setter) and native streams reported a length. A body built from a default source that declared its length was therefore sent with chunked encoding, where the C++ implementation sends a Content-Length. The default controller now caches the converted source's expectedLength, as the byte controller does, and TransformStream passes its transformer's through the source it builds for its readable, which retires the internal setter. Body consumption already treated a TransformStream readable's declaration as an exact total (readable ledger #21); that now covers any default source that declares one. A source that delivers more than it declared rejects text(), arrayBuffer() and the other consumers with a RangeError and is cancelled with it, where the C++ implementation returns everything. The divergence is intentional: the declaration is the exact-total contract that byte and native sources already enforce. typescript_implemented_streams is still experimental, with no enable date, so the change needs no compatibility flag. Fixes: #8040
jasnell
added a commit
that referenced
this pull request
Oct 28, 2026
Under typescript_implemented_streams, the default controller ignored the expectedLength its underlying source declared: only byte sources, a TransformStream's readable (through an internal setter) and native streams reported a length. A body built from a default source that declared its length was therefore sent with chunked encoding, where the C++ implementation sends a Content-Length. The default controller now caches the converted source's expectedLength, as the byte controller does, and TransformStream passes its transformer's through the source it builds for its readable, which retires the internal setter. Body consumption already treated a TransformStream readable's declaration as an exact total (readable ledger #21); that now covers any default source that declares one. A source that delivers more than it declared rejects text(), arrayBuffer() and the other consumers with a RangeError and is cancelled with it, where the C++ implementation returns everything. The divergence is intentional: the declaration is the exact-total contract that byte and native sources already enforce. typescript_implemented_streams is still experimental, with no enable date, so the change needs no compatibility flag. Fixes: #8040
jasnell
added a commit
that referenced
this pull request
Oct 28, 2026
Body consumption under typescript_implemented_streams treated a default source's or TransformStream readable's declared expectedLength as an exact total only on overflow: a stream closing short of its declaration resolved with what had arrived. It now rejects text(), arrayBuffer() and the other consumers with a RangeError, as byte and native sources already do by erroring at close(), and as the transport does by failing a short body. The stream has already closed, so there is nothing to cancel. Readable ledger #21 now covers both directions; C++ consumption still ignores the declaration. ReadableStreamDrainingReader's expectedLength reported the source's declaration even after the stream had been read, disagreeing with the length the C++ bridge sees. It now asks getReadableStreamExpectedLength(), so a partly read stream, or a fork made after a read, reports none. The C++ sides of readable ledgers #36 and #37 (readable-byte #45 and #46) are now marked as defects: ReadableStreamJsController's tryGetLength() reports the declared total regardless of reads or encoding.
jasnell
added a commit
that referenced
this pull request
Oct 28, 2026
Under typescript_implemented_streams, the default controller ignored the expectedLength its underlying source declared: only byte sources, a TransformStream's readable (through an internal setter) and native streams reported a length. A body built from a default source that declared its length was therefore sent with chunked encoding, where the C++ implementation sends a Content-Length. The default controller now caches the converted source's expectedLength, as the byte controller does, and TransformStream passes its transformer's through the source it builds for its readable, which retires the internal setter. Body consumption already treated a TransformStream readable's declaration as an exact total (readable ledger #21); that now covers any default source that declares one. A source that delivers more than it declared rejects text(), arrayBuffer() and the other consumers with a RangeError and is cancelled with it, where the C++ implementation returns everything. The divergence is intentional: the declaration is the exact-total contract that byte and native sources already enforce. typescript_implemented_streams is still experimental, with no enable date, so the change needs no compatibility flag. Fixes: #8040
jasnell
added a commit
that referenced
this pull request
Oct 28, 2026
Body consumption under typescript_implemented_streams treated a default source's or TransformStream readable's declared expectedLength as an exact total only on overflow: a stream closing short of its declaration resolved with what had arrived. It now rejects text(), arrayBuffer() and the other consumers with a RangeError, as byte and native sources already do by erroring at close(), and as the transport does by failing a short body. The stream has already closed, so there is nothing to cancel. Readable ledger #21 now covers both directions; C++ consumption still ignores the declaration. ReadableStreamDrainingReader's expectedLength reported the source's declaration even after the stream had been read, disagreeing with the length the C++ bridge sees. It now asks getReadableStreamExpectedLength(), so a partly read stream, or a fork made after a read, reports none. The C++ sides of readable ledgers #36 and #37 (readable-byte #45 and #46) are now marked as defects: ReadableStreamJsController's tryGetLength() reports the declared total regardless of reads or encoding.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Specifically, the following features are considered experimental:
$experimentalor$stableannotation instead of using presence/absence of a date, but I wanted to be cautious for now. (Incidentally, though, it looks like we should go ahead and assign dates to most of the flags that don't have them?)I decided to use a CLI flag rather than a config flag in order to add resistance against using this in production, but we can consider finer-grained control if it proves warranted.