fix(crypt): bug caused by link cache

This commit is contained in:
j2rong4cn
2025-07-06 11:23:32 +08:00
parent da35423198
commit d32c4fdb7a

View File

@ -256,8 +256,9 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (
} }
resultRangeReadCloser := &model.RangeReadCloser{} resultRangeReadCloser := &model.RangeReadCloser{}
resultRangeReadCloser.TryAdd(remoteLink.MFile) resultRangeReadCloser.TryAdd(remoteLink.MFile)
if remoteLink.RangeReadCloser != nil { remoteRangeReadCloser := remoteLink.RangeReadCloser
resultRangeReadCloser.AddClosers(remoteLink.RangeReadCloser.GetClosers()) if remoteRangeReadCloser != nil {
resultRangeReadCloser.AddClosers(remoteRangeReadCloser.GetClosers())
} }
remoteFileSize := remoteFile.GetSize() remoteFileSize := remoteFile.GetSize()
rangeReaderFunc := func(ctx context.Context, underlyingOffset, underlyingLength int64) (io.ReadCloser, error) { rangeReaderFunc := func(ctx context.Context, underlyingOffset, underlyingLength int64) (io.ReadCloser, error) {
@ -273,18 +274,16 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (
//keep reuse same MFile and close at last. //keep reuse same MFile and close at last.
return io.NopCloser(remoteLink.MFile), nil return io.NopCloser(remoteLink.MFile), nil
} }
rrc := remoteLink.RangeReadCloser if remoteRangeReadCloser == nil && len(remoteLink.URL) > 0 {
if rrc == nil && len(remoteLink.URL) > 0 {
var err error var err error
rrc, err = stream.GetRangeReadCloserFromLink(remoteFileSize, remoteLink) remoteRangeReadCloser, err = stream.GetRangeReadCloserFromLink(remoteFileSize, remoteLink)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resultRangeReadCloser.AddClosers(rrc.GetClosers()) resultRangeReadCloser.AddClosers(remoteRangeReadCloser.GetClosers())
remoteLink.RangeReadCloser = rrc
} }
if rrc != nil { if remoteRangeReadCloser != nil {
remoteReader, err := rrc.RangeRead(ctx, http_range.Range{Start: underlyingOffset, Length: length}) remoteReader, err := remoteRangeReadCloser.RangeRead(ctx, http_range.Range{Start: underlyingOffset, Length: length})
if err != nil { if err != nil {
return nil, err return nil, err
} }