Repository navigation
fix(kernel): retire deferred updates with destroyed entities - #292
Merged
Merged
Conversation
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.
Disconnecting an Entity can leave its deferred updates queued after destruction, producing duplicate missing-Entity errors on the next flush. Retire those updates after destruction callbacks and before removing the Entity, including work already detached into the active flush.
Preserve live neighbors, destruction notifications, parent-container markers and updates belonging to a recreated Entity. Extract the current batch entry so reentrant destruction can remove later entries without invalidating iteration; no instance layout, virtual interface or wire change is introduced.
Validation: three permanent regressions fail on the former implementation and pass after the repair (127 assertions). Kernel initialization and its independent allocation/ownership checks pass, as do clang-format 18 and bilingual Nimbus/content checks. One bounded real-server replay against the rebuilt Kernel DSO completed 28 nested-replication cycles, 336 moves/actions/pongs and three fresh reconnects with zero server ERROR/FATAL lines; all processes stopped normally and the listener was released. Only Kernel was rebuilt for this comparison; the other five runtime components and configuration were byte-checked frozen inputs. This is local candidate evidence, not accepted-main, long-run or capacity acceptance.
Synchronized with accepted CI acceleration #291 at main
b15140e571b2161028a40fdb59424c454d805ded; the Kernel patch is byte-identical to the locally tested version and full formatting passes after synchronization. Ready-for-review checks target86ab6e2c4d7cc1ca4f1f1c513eddb71ab9f4e9bc; protected full queue checks remain required before squash merge. This is independent of the native Asio 5,000-connection stall investigation.