X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/baf7a940be8927278e3b4b87e7366cebfc16532f..209df5ce842e24b3c6e99a322fe3d98ab2df720b:/syncer.go?ds=sidebyside diff --git a/syncer.go b/syncer.go index 1549461..3da6d7a 100644 --- a/syncer.go +++ b/syncer.go @@ -61,11 +61,13 @@ func (s *Syncer) Written() { // 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 @@ -92,6 +94,7 @@ func (s *Syncer) Flush(ctx context.Context) error { 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 @@ -109,6 +112,7 @@ func (s *Syncer) start() { s.running = true s.workers.Add(1) + go s.run(s.written) } @@ -130,6 +134,7 @@ func (s *Syncer) run(target uint64) { } close(s.done) + s.done = make(chan struct{}) s.start() }