Skip to content

Commit

Permalink
refactor(imagor): fanout seeker improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
cshum authored Oct 9, 2022
1 parent 952ef68 commit 490ae70
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions fanout.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ func fanoutReader(source io.ReadCloser, size int) func() (io.Reader, io.Seeker,
var lock sync.RWMutex
var once sync.Once
var consumers []chan []byte
var done = make(chan struct{})
var fullBufReady = make(chan struct{})
var closed []bool
var err error
var buf = make([]byte, size)
Expand Down Expand Up @@ -55,7 +55,7 @@ func fanoutReader(source io.ReadCloser, size int) func() (io.Reader, io.Seeker,
}
lock.RUnlock()
if currentSize >= size {
close(done)
close(fullBufReady)
}
if e != nil || currentSize >= size {
return
Expand Down Expand Up @@ -101,7 +101,7 @@ func fanoutReader(source io.ReadCloser, size int) func() (io.Reader, io.Seeker,
if readerClosed {
return 0, io.ErrClosedPipe
}
if fullBufReader != nil && !readerClosed {
if fullBufReader != nil {
// proxy to full buf if ready
return fullBufReader.Read(p)
}
Expand Down Expand Up @@ -153,17 +153,21 @@ func fanoutReader(source io.ReadCloser, size int) func() (io.Reader, io.Seeker,
once.Do(func() {
go init()
})

if fullBufReader != nil && !readerClosed {
return fullBufReader.Seek(offset, whence)
} else if fullBufReader == nil && !readerClosed {
<-done
fullBufReader = bytes.NewReader(buf)
_ = closeCh(false)
return fullBufReader.Seek(offset, whence)
} else {
if readerClosed {
return 0, io.ErrClosedPipe
}
if bufReader != nil &&
((whence == io.SeekStart && offset < bufReader.Size()) ||
(whence == io.SeekCurrent && offset < int64(bufReader.Len()))) {
return bufReader.Seek(offset, whence)
}
if fullBufReader != nil {
return fullBufReader.Seek(offset, whence)
}
<-fullBufReady
fullBufReader = bytes.NewReader(buf)
_ = closeCh(false)
return fullBufReader.Seek(offset, whence)
})
return
}
Expand Down

0 comments on commit 490ae70

Please sign in to comment.