From 1f9964cab68fa6d28290c2545b4763927e6b9c0a Mon Sep 17 00:00:00 2001 From: ngaut Date: Fri, 18 Dec 2015 21:21:22 +0800 Subject: [PATCH] store: Don't do any seek operation after store closed. --- store/localstore/kv.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/store/localstore/kv.go b/store/localstore/kv.go index e6e77683fe..8712acb8c9 100644 --- a/store/localstore/kv.go +++ b/store/localstore/kv.go @@ -101,7 +101,8 @@ func (s *dbStore) CommitTxn(txn *dbTxn) error { return errors.Trace(err) } -func (s *dbStore) seekWorker(seekCh chan *command) { +func (s *dbStore) seekWorker(wg *sync.WaitGroup, seekCh chan *command) { + defer wg.Done() for { var pending []*command select { @@ -131,8 +132,10 @@ func (s *dbStore) seekWorker(seekCh chan *command) { func (s *dbStore) scheduler() { closed := false seekCh := make(chan *command, 1000) + wgSeekWorkers := &sync.WaitGroup{} + wgSeekWorkers.Add(maxSeekWorkers) for i := 0; i < maxSeekWorkers; i++ { - go s.seekWorker(seekCh) + go s.seekWorker(wgSeekWorkers, seekCh) } for { @@ -150,9 +153,10 @@ func (s *dbStore) scheduler() { } case <-s.closeCh: closed = true - s.wg.Done() // notify seek worker to exit close(seekCh) + wgSeekWorkers.Wait() + s.wg.Done() } } }