// Flush returns when every write before the call is durable.
func (s *Syncer) Flush(ctx context.Context) error {
s.mutex.Lock()
+
target := s.written
s.mutex.Unlock()
for {
s.mutex.Lock()
+
reached := s.durable >= target
failure := s.failure
done := s.done
func (s *Syncer) Close() error {
err := s.Flush(context.Background())
s.workers.Wait()
+
if s.file != nil {
err = errors.Join(err, s.file.Close())
s.file = nil
s.running = true
s.workers.Add(1)
+
go s.run(s.written)
}
}
close(s.done)
+
s.done = make(chan struct{})
s.start()
}