Skip to content

Fix QTCP multi-flow correctness bugs#378

Merged
Krastanov merged 2 commits intoQuantumSavory:masterfrom
LBacciottini:fix/qtcp-multiflow-bugs
Apr 21, 2026
Merged

Fix QTCP multi-flow correctness bugs#378
Krastanov merged 2 commits intoQuantumSavory:masterfrom
LBacciottini:fix/qtcp-multiflow-bugs

Conversation

@LBacciottini
Copy link
Copy Markdown
Contributor

@LBacciottini LBacciottini commented Apr 8, 2026

Summary

Fixes several correctness bugs in the QTCP protocol that surface when running concurrent flows:

  • Drain loops: EndNodeController, NetworkNodeController, and LinkController now process all pending messages before sleeping, preventing stranded messages under bursty traffic
  • Reply matching: LinkLevelReplyAtSource/LinkLevelReplyAtHop lookups now match by flow_uuid and seq_num, fixing cross-flow reply corruption with concurrent flows
  • QTCPPairEnd metadata: reports actual flow_src from the QDatagram instead of hardcoded 0
  • LinkController slot mapping: each node now receives the entangler slot allocated on its own side of the link, fixing ArgumentError: indices not unique with concurrent cross-topology flows
  • Non-blocking LinkController: per-request entanglement logic extracted into a fire-and-forget helper coroutine, so the LinkController can process additional LinkLevelRequests while waiting for entanglement generation

CHANGELOG notes

  • (fix) QTCP controllers (EndNodeController, NetworkNodeController, LinkController) now drain all pending messages before sleeping, preventing protocol stalls under bursty traffic.
  • (fix) QTCP reply lookups (LinkLevelReplyAtSource, LinkLevelReplyAtHop) now match by flow_uuid and seq_num, fixing cross-flow corruption with concurrent flows.
  • (fix) QTCPPairEnd now reports the correct flow_src from the received QDatagram.
  • (fix) LinkController now maps entangler slots to the correct originator/destination nodes, fixing ArgumentError: indices not unique with concurrent cross-topology flows.
  • (fix) LinkController no longer blocks while waiting for entanglement generation, allowing concurrent link-level requests on the same link.

Checklist

  • The code is properly formatted and commented.
  • Substantial new functionality is documented within the docs.
  • All new functionality is tested.
  • All of the automated tests on github pass.
  • We recently started enforcing formatting checks. If formatting issues are reported in the new code you have written, please correct them.

Test plan

  • Existing QTCP tests pass (31/31)
  • Added regression test: concurrent flows on a 3x3 grid
  • Added regression test: concurrent flows sharing the same 5-node repeater chain

🤖 Generated with Claude Code

- Add drain loops to EndNodeController, NetworkNodeController, and
  LinkController so all pending messages are processed before sleeping
- Tighten LinkLevelReplyAtSource/LinkLevelReplyAtHop lookups to match
  by flow_uuid and seq_num, preventing cross-flow reply corruption
- Fix QTCPPairEnd to report actual flow_src from the QDatagram instead
  of a hardcoded 0
- Fix LinkController slot mapping so each node receives the entangler
  slot allocated on its own side of the link

Add regression tests for concurrent multi-flow scenarios on both grid
and shared-chain topologies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes several multi-flow correctness issues in the QTCP protocol implementation that could corrupt reply matching or strand pending messages under concurrent/bursty traffic, and adds regression tests to validate concurrent-flow behavior.

Changes:

  • Drain pending messages in EndNodeController, NetworkNodeController, and LinkController before sleeping to prevent stalls/stranded work.
  • Match link-level replies by (flow_uuid, seq_num) to prevent cross-flow reply corruption and propagate correct flow_src metadata into QTCPPairEnd.
  • Fix LinkController entangler slot mapping so each node receives the slot allocated on its own side of the link.
  • Add regression tests for concurrent flows on a grid and on a shared repeater chain.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/ProtocolZoo/qtcp.jl Implements drain loops, correct reply matching keys, correct QTCPPairEnd.flow_src, and correct per-side slot mapping in LinkController.
test/general/protocolzoo_qtcp_tests.jl Adds helper utilities and two new concurrent-flow regression testsets.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/ProtocolZoo/qtcp.jl
if !isnothing(llrequest)
workwasdone = true
@assert originator_node != destination_node "LinkController $(nodeA) $(nodeB) has a link request with originator node $(originator_node) equal to the destination node $(destination_node)"
_, flow_uuid, seq_num, remote_node = llrequest.tag
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remote_node is unpacked from llrequest.tag but never used. Consider replacing it with _ (or using it for an assertion/log) to avoid implying it affects entanglement creation or slot mapping.

Suggested change
_, flow_uuid, seq_num, remote_node = llrequest.tag
_, flow_uuid, seq_num, _ = llrequest.tag

Copilot uses AI. Check for mistakes.
Comment thread src/ProtocolZoo/qtcp.jl

# Check if there are any LinkLevelReplyAtHop messages and turn them into QTCPPairEnd messages
link_reply = querydelete!(mb, LinkLevelReplyAtHop, flow_uuid, seq_num, ❓)
@assert !isnothing(link_reply) "No LinkLevelReplyAtHop message found after the success of flow $(flow_uuid), sequence $(seq_num) at node $(node)"
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The assertion message says "after the success of flow ..." but this branch is handling a received QDatagram at the destination (before the success/ack is sent). Updating the wording would make debugging easier if this assert ever triggers.

Suggested change
@assert !isnothing(link_reply) "No LinkLevelReplyAtHop message found after the success of flow $(flow_uuid), sequence $(seq_num) at node $(node)"
@assert !isnothing(link_reply) "No LinkLevelReplyAtHop message found for received QDatagram of flow $(flow_uuid), sequence $(seq_num) at node $(node)"

Copilot uses AI. Check for mistakes.
Extract per-request entanglement logic into _link_handle_request,
a standalone @Resumable helper spawned with @process. The main
LinkController loop no longer blocks on @yield while waiting for
EntanglerProt, so it can immediately process additional
LinkLevelRequests arriving on the same link.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 8, 2026

Benchmark Results (Julia v1)

Time benchmarks
master be069b7... master / be069b7...
onchange/dual_messagebuffer_any/writers_2_waiters_1 0.872 ± 0.023 ms 1.14 ± 0.032 ms 0.768 ± 0.03
onchange/dual_messagebuffer_any/writers_4_waiters_1 1.71 ± 0.051 ms 2.27 ± 0.084 ms 0.751 ± 0.036
onchange/dual_messagebuffer_any/writers_4_waiters_4 2.08 ± 0.06 ms 2.51 ± 0.085 ms 0.826 ± 0.037
onchange/dual_messagebuffer_any/writers_8_waiters_4 4.22 ± 0.17 ms 5.14 ± 0.25 ms 0.822 ± 0.051
onchange/sharded_registers/pairs_1 0.342 ± 0.067 ms 0.455 ± 0.073 ms 0.752 ± 0.19
onchange/sharded_registers/pairs_16 5.58 ± 0.12 ms 7.28 ± 0.15 ms 0.766 ± 0.023
onchange/sharded_registers/pairs_32 11.6 ± 0.22 ms 15 ± 0.24 ms 0.775 ± 0.019
onchange/sharded_registers/pairs_4 1.33 ± 0.035 ms 1.75 ± 0.043 ms 0.76 ± 0.027
onchange/shared_messagebuffer_channel/writers_1_waiters_1 0.578 ± 0.031 ms 0.708 ± 0.026 ms 0.816 ± 0.053
onchange/shared_messagebuffer_channel/writers_1_waiters_8 0.516 ± 0.028 ms 0.576 ± 0.027 ms 0.896 ± 0.064
onchange/shared_messagebuffer_channel/writers_4_waiters_4 1.93 ± 0.089 ms 2.24 ± 0.16 ms 0.863 ± 0.073
onchange/shared_messagebuffer_channel/writers_8_waiters_1 4.45 ± 0.56 ms 5.55 ± 0.65 ms 0.803 ± 0.14
onchange/shared_messagebuffer_direct/writers_16_waiters_2 3.45 ± 0.65 ms 4.42 ± 0.68 ms 0.781 ± 0.19
onchange/shared_messagebuffer_direct/writers_1_waiters_1 0.234 ± 0.039 ms 0.306 ± 0.046 ms 0.764 ± 0.17
onchange/shared_messagebuffer_direct/writers_1_waiters_8 0.288 ± 0.054 ms 0.342 ± 0.057 ms 0.842 ± 0.21
onchange/shared_messagebuffer_direct/writers_2_waiters_16 0.681 ± 0.13 ms 0.795 ± 0.15 ms 0.856 ± 0.24
onchange/shared_messagebuffer_direct/writers_4_waiters_4 0.909 ± 0.16 ms 1.14 ± 0.18 ms 0.797 ± 0.19
onchange/shared_messagebuffer_direct/writers_8_waiters_1 1.62 ± 0.29 ms 2.17 ± 0.33 ms 0.749 ± 0.18
onchange/shared_register/writers_16_waiters_2 5.61 ± 1.2 ms 7.58 ± 1.3 ms 0.739 ± 0.2
onchange/shared_register/writers_1_waiters_1 0.344 ± 0.066 ms 0.46 ± 0.075 ms 0.747 ± 0.19
onchange/shared_register/writers_1_waiters_8 0.454 ± 0.077 ms 0.574 ± 0.098 ms 0.79 ± 0.19
onchange/shared_register/writers_2_waiters_16 1.17 ± 0.093 ms 1.43 ± 0.28 ms 0.821 ± 0.17
onchange/shared_register/writers_4_waiters_4 1.47 ± 0.25 ms 1.95 ± 0.34 ms 0.753 ± 0.19
onchange/shared_register/writers_8_waiters_1 2.66 ± 0.18 ms 3.57 ± 0.62 ms 0.745 ± 0.14
onchange/shared_regref/writers_1_waiters_1 0.343 ± 0.066 ms 0.468 ± 0.076 ms 0.733 ± 0.18
onchange/shared_regref/writers_1_waiters_8 0.456 ± 0.081 ms 0.572 ± 0.097 ms 0.797 ± 0.2
onchange/shared_regref/writers_4_waiters_4 1.47 ± 0.31 ms 1.97 ± 0.32 ms 0.745 ± 0.2
onchange/shared_regref/writers_8_waiters_1 2.67 ± 0.23 ms 3.62 ± 0.6 ms 0.737 ± 0.14
quantumstates/observable/quantumoptics 0.872 ± 0.28 μs 0.872 ± 0.31 μs 1 ± 0.48
querywait/messagebuffer_channel/writers_1_waiters_1 0.699 ± 0.027 ms 0.819 ± 0.026 ms 0.853 ± 0.043
querywait/messagebuffer_channel/writers_1_waiters_8 1.64 ± 0.059 ms 1.98 ± 0.095 ms 0.829 ± 0.05
querywait/messagebuffer_channel/writers_4_waiters_4 4.72 ± 0.57 ms 5.62 ± 0.6 ms 0.84 ± 0.13
querywait/messagebuffer_channel/writers_8_waiters_1 5.44 ± 0.6 ms 6.72 ± 0.52 ms 0.809 ± 0.11
querywait/messagebuffer_direct/writers_1_waiters_1 0.309 ± 0.044 ms 0.39 ± 0.051 ms 0.791 ± 0.15
querywait/messagebuffer_direct/writers_1_waiters_8 1.17 ± 0.19 ms 1.44 ± 0.22 ms 0.81 ± 0.18
querywait/messagebuffer_direct/writers_4_waiters_4 2.84 ± 0.48 ms 3.57 ± 0.52 ms 0.794 ± 0.18
querywait/messagebuffer_direct/writers_8_waiters_1 2.24 ± 0.33 ms 2.89 ± 0.38 ms 0.777 ± 0.15
querywait/register_query_wait/writers_1_waiters_1 0.28 ± 0.047 ms 0.355 ± 0.056 ms 0.789 ± 0.18
querywait/register_query_wait/writers_1_waiters_8 0.997 ± 0.19 ms 1.28 ± 0.21 ms 0.779 ± 0.2
querywait/register_query_wait/writers_4_waiters_4 2.35 ± 0.49 ms 3.08 ± 0.53 ms 0.761 ± 0.21
querywait/register_query_wait/writers_8_waiters_1 1.97 ± 0.35 ms 2.56 ± 0.42 ms 0.769 ± 0.18
querywait/register_querydelete_wait/writers_1_waiters_1 0.276 ± 0.045 ms 0.361 ± 0.054 ms 0.765 ± 0.17
querywait/register_querydelete_wait/writers_1_waiters_8 0.991 ± 0.19 ms 1.28 ± 0.22 ms 0.776 ± 0.2
querywait/register_querydelete_wait/writers_4_waiters_4 2.34 ± 0.48 ms 3.1 ± 0.53 ms 0.754 ± 0.2
querywait/register_querydelete_wait/writers_8_waiters_1 1.92 ± 0.35 ms 2.59 ± 0.4 ms 0.743 ± 0.18
register/creation_and_initialization/from_tests 0.225 ± 0.024 ms 0.234 ± 0.025 ms 0.964 ± 0.14
semaphore/api/lock_direct 1.17 ± 0.03 μs 1.23 ± 0.081 μs 0.951 ± 0.067
semaphore/api/onchange_register 1.2 ± 0.091 μs 1.27 ± 0.1 μs 0.945 ± 0.1
semaphore/api/onchange_regref 1.22 ± 0.09 μs 1.28 ± 0.12 μs 0.952 ± 0.11
semaphore/broadcast_direct/waiters_1_rounds_1 23.8 ± 1 μs 27.7 ± 1.5 μs 0.86 ± 0.059
semaphore/broadcast_direct/waiters_1_rounds_4 0.0599 ± 0.0097 ms 0.0741 ± 0.011 ms 0.808 ± 0.18
semaphore/broadcast_direct/waiters_256_rounds_1 0.047 ± 0.007 s 0.0484 ± 0.0075 s 0.971 ± 0.21
semaphore/broadcast_direct/waiters_64_rounds_1 3.06 ± 0.099 ms 3.27 ± 0.11 ms 0.934 ± 0.044
semaphore/broadcast_direct/waiters_64_rounds_4 12.3 ± 0.39 ms 13.4 ± 0.4 ms 0.914 ± 0.04
semaphore/broadcast_direct/waiters_8_rounds_1 0.133 ± 0.026 ms 0.155 ± 0.026 ms 0.853 ± 0.22
semaphore/broadcast_direct/waiters_8_rounds_4 0.425 ± 0.084 ms 0.525 ± 0.088 ms 0.809 ± 0.21
semaphore/broadcast_register/waiters_1_rounds_1 25.4 ± 1.9 μs 31.5 ± 2.6 μs 0.808 ± 0.09
semaphore/broadcast_register/waiters_1_rounds_4 0.0608 ± 0.0081 ms 0.0789 ± 0.011 ms 0.77 ± 0.15
semaphore/broadcast_register/waiters_256_rounds_1 0.047 ± 0.0073 s 0.0485 ± 0.0077 s 0.968 ± 0.21
semaphore/broadcast_register/waiters_64_rounds_1 3.07 ± 0.097 ms 3.24 ± 0.11 ms 0.946 ± 0.045
semaphore/broadcast_register/waiters_64_rounds_4 12.3 ± 0.35 ms 13.5 ± 0.48 ms 0.914 ± 0.042
semaphore/broadcast_register/waiters_8_rounds_1 0.138 ± 0.026 ms 0.161 ± 0.026 ms 0.854 ± 0.21
semaphore/broadcast_register/waiters_8_rounds_4 0.427 ± 0.079 ms 0.535 ± 0.091 ms 0.798 ± 0.2
semaphore/broadcast_regref/waiters_1_rounds_1 24.5 ± 1.3 μs 29.3 ± 1.5 μs 0.837 ± 0.061
semaphore/broadcast_regref/waiters_256_rounds_1 0.0507 ± 0.0049 s 0.0521 ± 0.0059 s 0.973 ± 0.14
semaphore/broadcast_regref/waiters_64_rounds_1 3.05 ± 0.098 ms 3.2 ± 0.1 ms 0.954 ± 0.043
semaphore/broadcast_regref/waiters_8_rounds_1 0.122 ± 0.025 ms 0.146 ± 0.026 ms 0.831 ± 0.23
tagquery/messagebuffer/query 0.471 ± 0.01 μs 0.461 ± 0.001 μs 1.02 ± 0.022
tagquery/messagebuffer/query_high_arity 0.39 ± 0.01 μs 0.441 ± 0.02 μs 0.884 ± 0.046
tagquery/messagebuffer/query_high_arity_predicate 9.08 ± 1.8 μs 9.14 ± 1.7 μs 0.993 ± 0.27
tagquery/messagebuffer/query_miss 0.151 ± 0.01 μs 0.15 ± 0.001 μs 1.01 ± 0.067
tagquery/messagebuffer/query_tag_dispatch 1.66 ± 0.01 μs 1.68 ± 0.01 μs 0.988 ± 0.0084
tagquery/messagebuffer/querydelete 0.371 ± 0.06 μs 0.431 ± 0.1 μs 0.861 ± 0.24
tagquery/messagebuffer/querydelete_back 0.481 ± 0.16 μs 0.371 ± 0.1 μs 1.3 ± 0.56
tagquery/messagebuffer/querydelete_front 0.221 ± 0.081 μs 0.24 ± 0.049 μs 0.921 ± 0.39
tagquery/messagebuffer/querydelete_miss 0.451 ± 0.16 μs 0.361 ± 0.07 μs 1.25 ± 0.51
tagquery/misc/from_tests 9.44 ± 2.9 μs 10.4 ± 3.2 μs 0.91 ± 0.39
tagquery/register/query 5.07 s 4.84 ± 0.00029 s 1.05
tagquery/register/query_assigned 0.982 ± 0.02 μs 0.962 ± 0.02 μs 1.02 ± 0.03
tagquery/register/query_exact_fifo 0.641 ± 0.011 μs 0.771 ± 0.021 μs 0.831 ± 0.027
tagquery/register/query_exact_filo 2.12 ± 0.021 μs 2.06 ± 0.021 μs 1.03 ± 0.015
tagquery/register/query_locked 0.531 ± 0.02 μs 0.761 ± 0.019 μs 0.698 ± 0.032
tagquery/register/query_miss 2.2 ± 0.011 μs 1.97 ± 0.011 μs 1.12 ± 0.0084
tagquery/register/query_predicate 2.36 ± 0.1 μs 1.64 ± 0.021 μs 1.44 ± 0.064
tagquery/register/query_tag_dispatch 2.14 ± 0.02 μs 2.13 ± 0.03 μs 1 ± 0.017
tagquery/register/query_unassigned 1.41 ± 0.011 μs 1.39 ± 0.011 μs 1.02 ± 0.011
tagquery/register/queryall 4.44 ± 0.011 s 5.08 s 0.873
tagquery/register/queryall_fifo 2.96 ± 0.38 μs 2.79 ± 0.34 μs 1.06 ± 0.19
tagquery/register/queryall_filo 2.89 ± 0.24 μs 2.73 ± 0.25 μs 1.06 ± 0.13
tagquery/register/queryall_tag_dispatch 2.21 ± 0.031 μs 2.18 ± 0.03 μs 1.01 ± 0.02
tagquery/register_high_arity/query_exact 0.371 ± 0.02 μs 0.34 ± 0.02 μs 1.09 ± 0.087
tagquery/register_high_arity/query_predicate 1.63 ± 0.03 μs 1.62 ± 0.031 μs 1.01 ± 0.027
tagquery/register_high_arity/queryall 0.371 ± 0.021 μs 0.371 ± 0.029 μs 1 ± 0.097
tagquery/register_mutating/querydelete_register 0.901 ± 0.14 μs 0.812 ± 0.12 μs 1.11 ± 0.24
tagquery/register_mutating/querydelete_regref_fifo 0.902 ± 0.12 μs 0.872 ± 0.13 μs 1.03 ± 0.21
tagquery/register_mutating/querydelete_regref_filo 1.3 ± 0.16 μs 0.862 ± 0.12 μs 1.51 ± 0.28
tagquery/register_mutating/untag_by_id 0.12 ± 0.02 μs 0.121 ± 0.02 μs 0.992 ± 0.23
tagquery/register_ref/query_fifo 0.581 ± 0.011 μs 0.541 ± 0.02 μs 1.07 ± 0.045
tagquery/register_ref/query_filo 0.832 ± 0.02 μs 0.601 ± 0.011 μs 1.38 ± 0.042
tagquery/register_ref/query_tag_dispatch 0.401 ± 0.01 μs 0.361 ± 0.011 μs 1.11 ± 0.044
tagquery/register_ref/queryall_fifo 0.842 ± 0.021 μs 0.852 ± 0.02 μs 0.988 ± 0.034
tagquery/register_ref/queryall_filo 0.731 ± 0.021 μs 0.722 ± 0.02 μs 1.01 ± 0.04
time_to_load 20.5 ± 0.096 s 20.8 ± 0.029 s 0.983 ± 0.0048
Memory benchmarks
master be069b7... master / be069b7...
onchange/dual_messagebuffer_any/writers_2_waiters_1 10 k allocs: 0.485 MB 10 k allocs: 0.485 MB 1
onchange/dual_messagebuffer_any/writers_4_waiters_1 19.9 k allocs: 0.96 MB 19.9 k allocs: 0.96 MB 1
onchange/dual_messagebuffer_any/writers_4_waiters_4 25.2 k allocs: 1.2 MB 25.2 k allocs: 1.2 MB 1
onchange/dual_messagebuffer_any/writers_8_waiters_4 0.0537 M allocs: 2.45 MB 0.0537 M allocs: 2.45 MB 1
onchange/sharded_registers/pairs_1 4.05 k allocs: 0.199 MB 4.05 k allocs: 0.199 MB 1
onchange/sharded_registers/pairs_16 0.0724 M allocs: 3.35 MB 0.0724 M allocs: 3.35 MB 1
onchange/sharded_registers/pairs_32 0.149 M allocs: 6.76 MB 0.149 M allocs: 6.76 MB 1
onchange/sharded_registers/pairs_4 16.4 k allocs: 0.809 MB 16.4 k allocs: 0.809 MB 1
onchange/shared_messagebuffer_channel/writers_1_waiters_1 4.49 k allocs: 0.215 MB 4.49 k allocs: 0.215 MB 1
onchange/shared_messagebuffer_channel/writers_1_waiters_8 5.33 k allocs: 0.253 MB 5.33 k allocs: 0.253 MB 1
onchange/shared_messagebuffer_channel/writers_4_waiters_4 19.1 k allocs: 0.905 MB 19.1 k allocs: 0.905 MB 1
onchange/shared_messagebuffer_channel/writers_8_waiters_1 0.0373 M allocs: 1.7 MB 0.0373 M allocs: 1.7 MB 1
onchange/shared_messagebuffer_direct/writers_16_waiters_2 0.0427 M allocs: 1.89 MB 0.0427 M allocs: 1.89 MB 1
onchange/shared_messagebuffer_direct/writers_1_waiters_1 2.36 k allocs: 0.112 MB 2.36 k allocs: 0.112 MB 1
onchange/shared_messagebuffer_direct/writers_1_waiters_8 3.2 k allocs: 0.152 MB 3.2 k allocs: 0.152 MB 1
onchange/shared_messagebuffer_direct/writers_2_waiters_16 8.24 k allocs: 0.444 MB 8.24 k allocs: 0.444 MB 1
onchange/shared_messagebuffer_direct/writers_4_waiters_4 10.8 k allocs: 0.504 MB 10.8 k allocs: 0.504 MB 1
onchange/shared_messagebuffer_direct/writers_8_waiters_1 18.7 k allocs: 0.874 MB 18.7 k allocs: 0.874 MB 1
onchange/shared_register/writers_16_waiters_2 0.0747 M allocs: 3.43 MB 0.0747 M allocs: 3.43 MB 1
onchange/shared_register/writers_1_waiters_1 4.05 k allocs: 0.199 MB 4.05 k allocs: 0.199 MB 1
onchange/shared_register/writers_1_waiters_8 5.7 k allocs: 0.275 MB 5.7 k allocs: 0.275 MB 1
onchange/shared_register/writers_2_waiters_16 15.1 k allocs: 0.861 MB 15.1 k allocs: 0.861 MB 1
onchange/shared_register/writers_4_waiters_4 19 k allocs: 0.919 MB 19 k allocs: 0.919 MB 0.999
onchange/shared_register/writers_8_waiters_1 0.0333 M allocs: 1.63 MB 0.0333 M allocs: 1.63 MB 1
onchange/shared_regref/writers_1_waiters_1 4.05 k allocs: 0.199 MB 4.05 k allocs: 0.199 MB 1
onchange/shared_regref/writers_1_waiters_8 5.7 k allocs: 0.275 MB 5.7 k allocs: 0.275 MB 1
onchange/shared_regref/writers_4_waiters_4 19 k allocs: 0.919 MB 19 k allocs: 0.919 MB 0.999
onchange/shared_regref/writers_8_waiters_1 0.0333 M allocs: 1.63 MB 0.0333 M allocs: 1.63 MB 1
quantumstates/observable/quantumoptics 22 allocs: 2.44 kB 22 allocs: 2.44 kB 1
querywait/messagebuffer_channel/writers_1_waiters_1 4.92 k allocs: 0.231 MB 4.92 k allocs: 0.231 MB 1
querywait/messagebuffer_channel/writers_1_waiters_8 15.6 k allocs: 0.734 MB 15.6 k allocs: 0.734 MB 1
querywait/messagebuffer_channel/writers_4_waiters_4 0.0419 M allocs: 1.89 MB 0.0419 M allocs: 1.89 MB 1
querywait/messagebuffer_channel/writers_8_waiters_1 0.0418 M allocs: 1.85 MB 0.0418 M allocs: 1.85 MB 1
querywait/messagebuffer_direct/writers_1_waiters_1 2.79 k allocs: 0.128 MB 2.79 k allocs: 0.128 MB 1
querywait/messagebuffer_direct/writers_1_waiters_8 13.4 k allocs: 0.633 MB 13.4 k allocs: 0.633 MB 1
querywait/messagebuffer_direct/writers_4_waiters_4 0.0324 M allocs: 1.47 MB 0.0324 M allocs: 1.47 MB 1
querywait/messagebuffer_direct/writers_8_waiters_1 22.8 k allocs: 1.02 MB 22.8 k allocs: 1.02 MB 1
querywait/register_query_wait/writers_1_waiters_1 2.56 k allocs: 0.137 MB 2.56 k allocs: 0.137 MB 1
querywait/register_query_wait/writers_1_waiters_8 12.1 k allocs: 0.607 MB 12.1 k allocs: 0.607 MB 1
querywait/register_query_wait/writers_4_waiters_4 27.8 k allocs: 1.42 MB 27.8 k allocs: 1.42 MB 1
querywait/register_query_wait/writers_8_waiters_1 20.4 k allocs: 1.09 MB 20.4 k allocs: 1.09 MB 1
querywait/register_querydelete_wait/writers_1_waiters_1 2.5 k allocs: 0.131 MB 2.5 k allocs: 0.131 MB 1
querywait/register_querydelete_wait/writers_1_waiters_8 12 k allocs: 0.602 MB 12 k allocs: 0.602 MB 1
querywait/register_querydelete_wait/writers_4_waiters_4 27.5 k allocs: 1.4 MB 27.5 k allocs: 1.4 MB 1
querywait/register_querydelete_wait/writers_8_waiters_1 19.8 k allocs: 1.04 MB 19.8 k allocs: 1.04 MB 1
register/creation_and_initialization/from_tests 2.67 k allocs: 0.945 MB 2.67 k allocs: 0.945 MB 1
semaphore/api/lock_direct 15 allocs: 0.875 kB 15 allocs: 0.875 kB 1
semaphore/api/onchange_register 15 allocs: 0.875 kB 15 allocs: 0.875 kB 1
semaphore/api/onchange_regref 15 allocs: 0.875 kB 15 allocs: 0.875 kB 1
semaphore/broadcast_direct/waiters_1_rounds_1 0.144 k allocs: 7.58 kB 0.144 k allocs: 7.58 kB 1
semaphore/broadcast_direct/waiters_1_rounds_4 0.521 k allocs: 26.9 kB 0.521 k allocs: 26.9 kB 1
semaphore/broadcast_direct/waiters_256_rounds_1 0.495 M allocs: 0.0331 GB 0.495 M allocs: 0.0331 GB 1
semaphore/broadcast_direct/waiters_64_rounds_1 0.0365 M allocs: 2.36 MB 0.0365 M allocs: 2.36 MB 1
semaphore/broadcast_direct/waiters_64_rounds_4 0.146 M allocs: 9.67 MB 0.146 M allocs: 9.67 MB 1
semaphore/broadcast_direct/waiters_8_rounds_1 1.36 k allocs: 0.0686 MB 1.36 k allocs: 0.0686 MB 1
semaphore/broadcast_direct/waiters_8_rounds_4 5.31 k allocs: 0.261 MB 5.31 k allocs: 0.261 MB 1
semaphore/broadcast_register/waiters_1_rounds_1 0.147 k allocs: 7.7 kB 0.147 k allocs: 7.7 kB 1
semaphore/broadcast_register/waiters_1_rounds_4 0.531 k allocs: 27.4 kB 0.531 k allocs: 27.4 kB 1
semaphore/broadcast_register/waiters_256_rounds_1 0.495 M allocs: 0.0331 GB 0.495 M allocs: 0.0331 GB 1
semaphore/broadcast_register/waiters_64_rounds_1 0.0365 M allocs: 2.36 MB 0.0365 M allocs: 2.36 MB 1
semaphore/broadcast_register/waiters_64_rounds_4 0.146 M allocs: 9.67 MB 0.146 M allocs: 9.67 MB 1
semaphore/broadcast_register/waiters_8_rounds_1 1.36 k allocs: 0.0687 MB 1.36 k allocs: 0.0687 MB 1
semaphore/broadcast_register/waiters_8_rounds_4 5.32 k allocs: 0.262 MB 5.32 k allocs: 0.261 MB 1
semaphore/broadcast_regref/waiters_1_rounds_1 0.147 k allocs: 7.7 kB 0.147 k allocs: 7.7 kB 1
semaphore/broadcast_regref/waiters_256_rounds_1 0.495 M allocs: 0.0331 GB 0.495 M allocs: 0.0331 GB 1
semaphore/broadcast_regref/waiters_64_rounds_1 0.0365 M allocs: 2.36 MB 0.0365 M allocs: 2.36 MB 1
semaphore/broadcast_regref/waiters_8_rounds_1 1.36 k allocs: 0.0676 MB 1.36 k allocs: 0.0687 MB 0.984
tagquery/messagebuffer/query 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
tagquery/messagebuffer/query_high_arity 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
tagquery/messagebuffer/query_high_arity_predicate 0.393 k allocs: 6.22 kB 0.393 k allocs: 6.22 kB 1
tagquery/messagebuffer/query_miss 0 allocs: 0 B 0 allocs: 0 B
tagquery/messagebuffer/query_tag_dispatch 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
tagquery/messagebuffer/querydelete 1 allocs: 32 B 1 allocs: 32 B 1
tagquery/messagebuffer/querydelete_back 1 allocs: 32 B 1 allocs: 32 B 1
tagquery/messagebuffer/querydelete_front 1 allocs: 32 B 1 allocs: 32 B 1
tagquery/messagebuffer/querydelete_miss 0 allocs: 0 B 0 allocs: 0 B
tagquery/misc/from_tests 0.187 k allocs: 13.1 kB 0.187 k allocs: 13.1 kB 1
tagquery/register/query 4.85 M allocs: 0.605 GB 5.01 M allocs: 0.625 GB 0.968
tagquery/register/query_assigned 3 allocs: 0.281 kB 3 allocs: 0.281 kB 1
tagquery/register/query_exact_fifo 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register/query_exact_filo 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register/query_locked 3 allocs: 0.281 kB 3 allocs: 0.281 kB 1
tagquery/register/query_miss 1 allocs: 0.109 kB 1 allocs: 0.109 kB 1
tagquery/register/query_predicate 14 allocs: 0.578 kB 14 allocs: 0.578 kB 1
tagquery/register/query_tag_dispatch 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register/query_unassigned 3 allocs: 0.281 kB 3 allocs: 0.281 kB 1
tagquery/register/queryall 3 M allocs: 0.576 GB 4.86 M allocs: 0.946 GB 0.609
tagquery/register/queryall_fifo 6 allocs: 6.8 kB 6 allocs: 6.8 kB 1
tagquery/register/queryall_filo 6 allocs: 6.8 kB 6 allocs: 6.8 kB 1
tagquery/register/queryall_tag_dispatch 3 allocs: 0.625 kB 3 allocs: 0.625 kB 1
tagquery/register_high_arity/query_exact 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register_high_arity/query_predicate 21 allocs: 0.75 kB 21 allocs: 0.75 kB 1
tagquery/register_high_arity/queryall 3 allocs: 0.625 kB 3 allocs: 0.625 kB 1
tagquery/register_mutating/querydelete_register 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register_mutating/querydelete_regref_fifo 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register_mutating/querydelete_regref_filo 2 allocs: 0.266 kB 2 allocs: 0.266 kB 1
tagquery/register_mutating/untag_by_id 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
tagquery/register_ref/query_fifo 3 allocs: 0.375 kB 3 allocs: 0.375 kB 1
tagquery/register_ref/query_filo 3 allocs: 0.375 kB 3 allocs: 0.375 kB 1
tagquery/register_ref/query_tag_dispatch 3 allocs: 0.375 kB 3 allocs: 0.375 kB 1
tagquery/register_ref/queryall_fifo 4 allocs: 0.734 kB 4 allocs: 0.734 kB 1
tagquery/register_ref/queryall_filo 4 allocs: 0.734 kB 4 allocs: 0.734 kB 1
time_to_load 0.148 k allocs: 10.8 kB 0.143 k allocs: 10.6 kB 1.02

@Krastanov Krastanov merged commit 2dd5367 into QuantumSavory:master Apr 21, 2026
12 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

QTCP's LinkController might miss LinkRequests arriving while entanglement is being attempted

3 participants