layer/layer_store: ensure NewInputTarStream resources are released#38413
Merged
Conversation
In applyTar, if the driver's ApplyDiff returns an error, the function returns early without calling io.Copy. As a consequence, the resources (a goroutine and some buffers holding the uncompressed image, the digest, etc...) allocated or referenced by NewInputTarStream above aren't released, as the worker goroutine only finishes when it finds EOF or a closed pipe. Signed-off-by: Sergio Lopez <[email protected]>
Codecov Report
@@ Coverage Diff @@
## master #38413 +/- ##
==========================================
- Coverage 36.58% 36.58% -0.01%
==========================================
Files 608 608
Lines 44988 44988
==========================================
- Hits 16458 16457 -1
- Misses 26250 26251 +1
Partials 2280 2280 |
Contributor
|
LGTM 🐳 |
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.
In applyTar, if the driver's ApplyDiff returns an error, the function
returns early without calling io.Copy.
As a consequence, the resources (a goroutine and some buffers holding
the uncompressed image, the digest, etc...) allocated or referenced by
NewInputTarStream above aren't released, as the worker goroutine only
finishes when it finds EOF or a closed pipe.
Signed-off-by: Sergio Lopez [email protected]
- What I did
I've changed layer/layer_store.go:applyTar to ensure the resources allocated by NewInputTarStream are always released.
- How I did it
By moving the call to io.Copy to put it before the place where the ApplyDiff error is checked, to ensure is unconditionally called.
- How to verify it
I'm using dlv to simulate the issue:
(another terminal)
(back to dlv)
(just another terminal more)
(back to dlv)
Without the patch, we get a stuck goroutine as shown above. With it, we get the same error, but without the stuck goroutine.
- Description for the changelog
layer/layer_store: ensure NewInputTarStream resources are released
- A picture of a cute animal (not mandatory but encouraged)