diff --git a/ddtrace/debugging/_probe/registry.py b/ddtrace/debugging/_probe/registry.py index 83a56ad40f9..e1a578794b4 100644 --- a/ddtrace/debugging/_probe/registry.py +++ b/ddtrace/debugging/_probe/registry.py @@ -203,7 +203,7 @@ def unregister(self, *probes: Probe) -> List[Probe]: def get_pending(self, location: str) -> List[Probe]: """Get the currently pending probes by location.""" - return self._pending[location] + return self._pending[location].copy() def __contains__(self, probe: object) -> bool: """Check if a probe is in the registry.""" diff --git a/releasenotes/notes/fix-di-copy-pending-probes-be21850231275165.yaml b/releasenotes/notes/fix-di-copy-pending-probes-be21850231275165.yaml new file mode 100644 index 00000000000..8d2ee95d202 --- /dev/null +++ b/releasenotes/notes/fix-di-copy-pending-probes-be21850231275165.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + dynamic instrumentation: fix an issue that prevented multiple probes on the + same location from being instrumented. diff --git a/tests/debugging/test_debugger.py b/tests/debugging/test_debugger.py index 0e9ad67698d..54335f7a972 100644 --- a/tests/debugging/test_debugger.py +++ b/tests/debugging/test_debugger.py @@ -553,6 +553,8 @@ def test_debugger_multiple_function_probes_on_same_lazy_module(): for i in range(3) ] + sys.modules.pop("tests.submod.stuff", None) + with debugger() as d: d.add_probes(*probes) @@ -560,6 +562,7 @@ def test_debugger_multiple_function_probes_on_same_lazy_module(): assert len(d._probe_registry) == len(probes) assert all(_.error_type is None for _ in d._probe_registry.values()) + assert len(d._probe_registry._pending) == 0 # DEV: The following tests are to ensure compatibility with the tracer