Fix git.Blob.DataAsync(): close pipe since we return a NopCloser (#16899)
* make sure headGitRepo is closed on err too * refactor * Fix git.Blob.DataAsync(): exec cancel since we already read all bytes (close pipe since we return a NopCloser)
This commit is contained in:
parent
bb4cc876b1
commit
d21702475b
4 changed files with 7 additions and 9 deletions
|
@ -47,8 +47,8 @@ func (b *Blob) DataAsync() (io.ReadCloser, error) {
|
||||||
|
|
||||||
if size < 4096 {
|
if size < 4096 {
|
||||||
bs, err := ioutil.ReadAll(io.LimitReader(rd, size))
|
bs, err := ioutil.ReadAll(io.LimitReader(rd, size))
|
||||||
|
defer cancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cancel()
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
_, err = rd.Discard(1)
|
_, err = rd.Discard(1)
|
||||||
|
@ -106,12 +106,12 @@ func (b *blobReader) Read(p []byte) (n int, err error) {
|
||||||
|
|
||||||
// Close implements io.Closer
|
// Close implements io.Closer
|
||||||
func (b *blobReader) Close() error {
|
func (b *blobReader) Close() error {
|
||||||
|
defer b.cancel()
|
||||||
if b.n > 0 {
|
if b.n > 0 {
|
||||||
for b.n > math.MaxInt32 {
|
for b.n > math.MaxInt32 {
|
||||||
n, err := b.rd.Discard(math.MaxInt32)
|
n, err := b.rd.Discard(math.MaxInt32)
|
||||||
b.n -= int64(n)
|
b.n -= int64(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.cancel()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
b.n -= math.MaxInt32
|
b.n -= math.MaxInt32
|
||||||
|
@ -119,14 +119,12 @@ func (b *blobReader) Close() error {
|
||||||
n, err := b.rd.Discard(int(b.n))
|
n, err := b.rd.Discard(int(b.n))
|
||||||
b.n -= int64(n)
|
b.n -= int64(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.cancel()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if b.n == 0 {
|
if b.n == 0 {
|
||||||
_, err := b.rd.Discard(1)
|
_, err := b.rd.Discard(1)
|
||||||
b.n--
|
b.n--
|
||||||
b.cancel()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -621,7 +621,6 @@ func CompareDiff(ctx *context.Context) {
|
||||||
headGitRepo.Close()
|
headGitRepo.Close()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -419,9 +419,6 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repos
|
||||||
}
|
}
|
||||||
|
|
||||||
handleTeamMentions(ctx)
|
handleTeamMentions(ctx)
|
||||||
if ctx.Written() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func retrieveProjects(ctx *context.Context, repo *models.Repository) {
|
func retrieveProjects(ctx *context.Context, repo *models.Repository) {
|
||||||
|
|
|
@ -1024,10 +1024,14 @@ func CompareAndPullRequestPost(ctx *context.Context) {
|
||||||
)
|
)
|
||||||
|
|
||||||
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx)
|
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx)
|
||||||
|
defer func() {
|
||||||
|
if headGitRepo != nil {
|
||||||
|
headGitRepo.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer headGitRepo.Close()
|
|
||||||
|
|
||||||
labelIDs, assigneeIDs, milestoneID, _ := ValidateRepoMetas(ctx, *form, true)
|
labelIDs, assigneeIDs, milestoneID, _ := ValidateRepoMetas(ctx, *form, true)
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
|
|
Loading…
Reference in a new issue