fix: Only overwrite from manager at most once

This commit is contained in:
Felicitas Pojtinger
2021-12-15 22:49:32 +01:00
parent 8d922ccd81
commit 3d4ee0d7ed

View File

@@ -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
}