From 3d4ee0d7ed1f49cae2e8f0a7f30bb3196600fb4b Mon Sep 17 00:00:00 2001 From: Felicitas Pojtinger Date: Wed, 15 Dec 2021 22:49:32 +0100 Subject: [PATCH] fix: Only overwrite from manager at most once --- pkg/tape/manager.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/tape/manager.go b/pkg/tape/manager.go index ee043bf..eaeaec0 100644 --- a/pkg/tape/manager.go +++ b/pkg/tape/manager.go @@ -4,7 +4,6 @@ import ( "io" "os" "sync" - "syscall" "github.com/pojntfx/stfs/pkg/config" ) @@ -21,6 +20,8 @@ type TapeManager struct { readerIsRegular bool closer func() error + + overwrote bool } func NewTapeManager( @@ -38,10 +39,16 @@ func NewTapeManager( func (m *TapeManager) GetWriter() (config.DriveWriterConfig, error) { m.driveLock.Lock() + overwrite := m.overwrite + if m.overwrote { + overwrite = false + } + m.overwrote = true + writer, writerIsRegular, err := OpenTapeWriteOnly( m.drive, m.recordSize, - m.overwrite, + overwrite, ) if err != nil { return config.DriveWriterConfig{}, err @@ -94,7 +101,7 @@ func (m *TapeManager) openOrReuseReader() error { reopen := false if m.reader == nil { reopen = true - } else if _, err := m.reader.Seek(0, io.SeekCurrent); err == syscall.EBADF { + } else if _, err := m.reader.Seek(0, io.SeekCurrent); err != nil { // File is closed reopen = true }