From 763bc14abbb5a9b61c5a9c95a4f16b1bd48525e3 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 31 Aug 2021 04:21:24 +0200 Subject: [PATCH 1/3] make sure headGitRepo is closed on err too --- routers/web/repo/compare.go | 7 +++++-- routers/web/repo/pull.go | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go index ec65813656fe5..af3d0a87a769c 100644 --- a/routers/web/repo/compare.go +++ b/routers/web/repo/compare.go @@ -616,11 +616,14 @@ func getBranchesAndTagsForRepo(user *models.User, repo *models.Repository) (bool // CompareDiff show different from one commit to another commit func CompareDiff(ctx *context.Context) { headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := ParseCompareInfo(ctx) - + defer func() { + if headGitRepo != nil { + headGitRepo.Close() + } + }() if ctx.Written() { return } - defer headGitRepo.Close() nothingToCompare := PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch, gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index a41c9eb2b40a7..0924a865af938 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -1028,10 +1028,14 @@ func CompareAndPullRequestPost(ctx *context.Context) { ) headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx) + defer func() { + if headGitRepo != nil { + headGitRepo.Close() + } + }() if ctx.Written() { return } - defer headGitRepo.Close() labelIDs, assigneeIDs, milestoneID, _ := ValidateRepoMetas(ctx, *form, true) if ctx.Written() { From 94663e205c6651955a952bcee8d2d502d859d6ad Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 31 Aug 2021 04:38:43 +0200 Subject: [PATCH 2/3] refactor --- modules/git/blob_nogogit.go | 4 +--- routers/web/repo/issue.go | 3 --- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go index 26815a63f1abb..53c02afcf29ad 100644 --- a/modules/git/blob_nogogit.go +++ b/modules/git/blob_nogogit.go @@ -106,12 +106,12 @@ func (b *blobReader) Read(p []byte) (n int, err error) { // Close implements io.Closer func (b *blobReader) Close() error { + defer b.cancel() if b.n > 0 { for b.n > math.MaxInt32 { n, err := b.rd.Discard(math.MaxInt32) b.n -= int64(n) if err != nil { - b.cancel() return err } b.n -= math.MaxInt32 @@ -119,14 +119,12 @@ func (b *blobReader) Close() error { n, err := b.rd.Discard(int(b.n)) b.n -= int64(n) if err != nil { - b.cancel() return err } } if b.n == 0 { _, err := b.rd.Discard(1) b.n-- - b.cancel() return err } return nil diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 3f7af7a51faa2..bb3a0c8a9c79f 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -419,9 +419,6 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repos } handleTeamMentions(ctx) - if ctx.Written() { - return - } } func retrieveProjects(ctx *context.Context, repo *models.Repository) { From 0a02c998ac4d258d3e8aad38b19498bbd635274c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 31 Aug 2021 04:39:53 +0200 Subject: [PATCH 3/3] Fix git.Blob.DataAsync(): exec cancel since we already read all bytes (close pipe since we return a NopCloser) --- modules/git/blob_nogogit.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/git/blob_nogogit.go b/modules/git/blob_nogogit.go index 53c02afcf29ad..3391bc39311b1 100644 --- a/modules/git/blob_nogogit.go +++ b/modules/git/blob_nogogit.go @@ -47,8 +47,8 @@ func (b *Blob) DataAsync() (io.ReadCloser, error) { if size < 4096 { bs, err := ioutil.ReadAll(io.LimitReader(rd, size)) + defer cancel() if err != nil { - cancel() return nil, err } _, err = rd.Discard(1)