diff --git a/util/chunk/row_container.go b/util/chunk/row_container.go index e402a6ff50..6ff4d4300f 100644 --- a/util/chunk/row_container.go +++ b/util/chunk/row_container.go @@ -68,6 +68,10 @@ func (c *RowContainer) SpillToDisk() { } // c.actionSpill may be nil when testing SpillToDisk directly. if c.actionSpill != nil { + if c.actionSpill.getStatus() == spilledYet { + // The rowContainer has been closed. + return + } c.actionSpill.setStatus(spilling) defer c.actionSpill.cond.Broadcast() defer c.actionSpill.setStatus(spilledYet) @@ -213,6 +217,11 @@ func (c *RowContainer) GetDiskTracker() *disk.Tracker { func (c *RowContainer) Close() (err error) { c.m.RLock() defer c.m.RUnlock() + if c.actionSpill != nil { + // Set status to spilledYet to avoid spilling. + c.actionSpill.setStatus(spilledYet) + c.actionSpill.cond.Broadcast() + } if c.alreadySpilled() { err = c.m.recordsInDisk.Close() c.m.recordsInDisk = nil