[6.0] Fix context pooling concurrency issue #26226
Merged
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.
Fixes #26202
Description
When using DbContext pooling, the DbContext disposal logic modifies the state after the context has been returned to the pool, creating a race condition with possible consumers renting the context out of the pool.
Customer impact
When using DbContext pooling, an ObjectDisposedException may occur when using a pooled context. This is the kind of bug that only happens very occasionally but then will cause the application to fail unexpectedly and in a way that is difficult to diagnose. This means lack of customer reports doesn't mean it isn't impacting overall reliability of apps that use EF Core.
How found
Customer reported.
Regression
No; exists in 5.0 also. We intend to backport there. Does not happen on 3.1.
Testing
Test for this scenario added in the PR.
Risk
Low, the fix is quite simple.
We may want to revisit and simplify later, but for now here's a minimal fix.