Repository navigation
Fix LangGraph registration ownership during cleanup - #1941
Draft
priscilla-leang1 wants to merge 1 commit into
Draft
priscilla-leang1 wants to merge 1 commit into
priscilla-leang1 wants to merge 1 commit into
Conversation
This branch has not been deployed
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.
Summary
A retired LangGraph workflow coroutine can be garbage-collected after another workflow instance has registered its graphs and functional entrypoints. Its cleanup currently reads the active workflow context and unconditionally removes that run's registration. This can unregister a replacement instance, unregister a different workflow, or raise when no workflow context exists.
Capture the run ID at registration and give each inbound instance an ownership token. Cleanup removes registration and store-warning state only if that instance still owns it. A reentrant lock keeps registration and conditional removal atomic across threads while allowing cleanup triggered by same-thread garbage collection. Checking graph-object identity alone would not cover instances sharing the same plugin.
Regression coverage
The included tests cover replacement with a fresh or reused plugin, cleanup under another workflow's context, cleanup outside a workflow context, and ordinary completion. Closing a suspended coroutine makes the cleanup ordering deterministic without depending on GC timing.
Validation
git diff --checkpass.Validation used published wheel bridges with the modified Python interceptor. The upstream Rust bridge was not rebuilt, and the full upstream lint and test suites have not been run. This draft is ready for maintainer feedback and upstream CI.