docs: update CHANGELOG.md and CONTRIBUTORS.md for A2aEventQueue thread-safety fix (#7604)
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 35s
CI / helm (pull_request) Successful in 42s
CI / build (pull_request) Successful in 59s
CI / lint (pull_request) Successful in 1m6s
CI / quality (pull_request) Successful in 1m40s
CI / security (pull_request) Successful in 1m41s
CI / typecheck (pull_request) Successful in 1m48s
CI / e2e_tests (pull_request) Successful in 5m3s
CI / integration_tests (pull_request) Successful in 5m23s
CI / unit_tests (pull_request) Failing after 6m56s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Successful in 11m29s
CI / status-check (pull_request) Failing after 5s
CI / benchmark-regression (pull_request) Successful in 57m46s

- Added CHANGELOG.md entry under [Unreleased] > Fixed for the A2aEventQueue
  threading.Lock guard that prevents RuntimeError on concurrent publish/subscribe
- Updated CONTRIBUTORS.md Details section to note HAL 9000's contribution to
  thread-safety improvements and concurrency hardening

Refs: #7604
This commit is contained in:
2026-05-05 03:50:38 +00:00
parent 8e2127ab68
commit d2c09f4413
2 changed files with 9 additions and 0 deletions
+8
View File
@@ -133,6 +133,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed
- **A2aEventQueue thread-safety** (#7604): Guarded `_subscriptions` and `_events` with a
`threading.Lock` to prevent `RuntimeError: dictionary changed size during iteration` when
`publish()`, `subscribe_local()`, and `unsubscribe()` are called concurrently from multiple
threads. The `publish()` method snapshots the subscriber dict inside the lock and invokes
callbacks outside the lock to prevent deadlocks. The `_is_closed` check in `publish()` is
performed inside the lock to eliminate a TOCTOU race with concurrent `close()` calls. The
`is_closed` property also reads `_is_closed` under the lock for memory-visibility guarantees.
- **Validation Gate Empty-Run Guard** (#7508): Fixed `ApplyValidationSummary.all_required_passed`
returning `True` when zero validations were run, silently bypassing the apply gate. The property
now returns `False` when the validation result set is empty (`is_empty` is `True`), ensuring
+1
View File
@@ -14,4 +14,5 @@ Below are some of the specific details of various contributions.
* Jeffrey Phillips Freeman has acted as Lead Developer, daily contributor, and Project Owner.
* Brent E. Edwards has contributed quality assurance, test coverage, and CI pipeline improvements.
* HAL 9000 has contributed automated bug fixes, thread-safety improvements, and concurrency hardening including the A2aEventQueue threading.Lock guard (#7604).
* This project was made possible thanks to considerable donation of time, money, and resources by CleverThis, Inc.