diff options
-rw-r--r-- | sql/cache.go | 6 | ||||
-rw-r--r-- | sql/logger.go | 7 |
2 files changed, 6 insertions, 7 deletions
diff --git a/sql/cache.go b/sql/cache.go index 82259bc..9d5e536 100644 --- a/sql/cache.go +++ b/sql/cache.go @@ -30,7 +30,7 @@ type Cache struct { // NewCache creates a new cache using client to persist entries. func NewCache(client *Client, logger *log.Logger) *Cache { c := &Cache{ - queue: make(chan query, 100), + queue: make(chan query, 1024), client: client, logger: logger, } @@ -38,7 +38,7 @@ func NewCache(client *Client, logger *log.Logger) *Cache { return c } -// Close drains and persist queued requests in this cache. +// Close consumes any outstanding queued requests and closes the cache. func (c *Cache) Close() error { c.wg.Wait() return nil @@ -99,6 +99,6 @@ func (c *Cache) readQueue() { default: c.logger.Printf("unhandled operation %d", q.op) } - c.wg.Add(-1) + c.wg.Done() } } diff --git a/sql/logger.go b/sql/logger.go index e226103..7890c54 100644 --- a/sql/logger.go +++ b/sql/logger.go @@ -40,13 +40,12 @@ type Entry struct { func NewLogger(db *Client, mode int, ttl time.Duration, logger *log.Logger) *Logger { l := &Logger{ db: db, - queue: make(chan Entry, 100), + queue: make(chan Entry, 1024), now: time.Now, mode: mode, logger: logger, } if mode != LogDiscard { - l.wg.Add(1) go l.readQueue(ttl) } return l @@ -54,7 +53,6 @@ func NewLogger(db *Client, mode int, ttl time.Duration, logger *log.Logger) *Log // Close consumes any outstanding log requests and closes the logger. func (l *Logger) Close() error { - close(l.queue) l.wg.Wait() return nil } @@ -70,6 +68,7 @@ func (l *Logger) Record(remoteAddr net.IP, hijacked bool, qtype uint16, question if l.mode == LogHijacked && !hijacked { return } + l.wg.Add(1) l.queue <- Entry{ Time: l.now(), RemoteAddr: remoteAddr, @@ -110,7 +109,6 @@ func (l *Logger) Get(n int) ([]Entry, error) { } func (l *Logger) readQueue(ttl time.Duration) { - defer l.wg.Done() for e := range l.queue { if err := l.db.WriteLog(e.Time, e.RemoteAddr, e.Hijacked, e.Qtype, e.Question, e.Answers...); err != nil { l.logger.Printf("write failed: %+v: %s", e, err) @@ -121,5 +119,6 @@ func (l *Logger) readQueue(ttl time.Duration) { l.logger.Printf("deleting log entries before %v failed: %s", t, err) } } + l.wg.Done() } } |