fix(perception): release processed source payloads

This commit is contained in:
DCCONSTRUCTIONS
2026-08-25 18:04:26 +03:00
parent b5080671c9
commit 5b07372791
2 changed files with 55 additions and 7 deletions
+36
View File
@@ -1,9 +1,11 @@
from __future__ import annotations
import gc
import json
import subprocess
import sys
import threading
import weakref
from collections.abc import Callable, Iterator
from dataclasses import replace
from pathlib import Path
@@ -553,6 +555,40 @@ def test_reference_graph_v2_observes_final_delivery_completion_age() -> None:
assert observed == [(0, 123, 123)]
def test_reference_graph_retains_source_identity_without_processed_payload() -> None:
packet = _packet(0)
graph = _graph_v2(_Source((packet,)))
result = graph.run()
assert result.state is GraphState.STOPPED
assert graph._admitted == {0: packet.envelope}
assert graph._admitted_at_ns == {}
def test_reference_graph_releases_ephemeral_source_payloads_after_run() -> None:
payloads: list[weakref.ReferenceType[np.ndarray]] = []
class EphemeralSource:
provider_id = _Source.provider_id
def packets(self, stop_event: Event) -> Iterator[SourcePacket]:
for sequence in range(32):
if stop_event.is_set():
return
image = np.empty((64, 64, 3), dtype=np.uint8)
payloads.append(weakref.ref(image))
yield replace(_packet(sequence), image_payload=image)
graph = _graph_v2(EphemeralSource())
result = graph.run()
gc.collect()
assert result.state is GraphState.STOPPED
assert not any(reference() is not None for reference in payloads)
def test_reference_graph_v2_observes_exact_delivery_evidence_inputs() -> None:
observed: list[tuple[int, int, tuple[str, ...], frozenset[str], int]] = []