From 0c822d13a151d80ddc1906fb18e8262e097f9155 Mon Sep 17 00:00:00 2001 From: Shenghui Wu <793703860@qq.com> Date: Wed, 9 Sep 2020 13:04:52 +0800 Subject: [PATCH] util: avoid spilling to disk after rowContainer has been closed. (#19750) --- util/chunk/row_container.go | 9 +++++++++ 1 file changed, 9 insertions(+) 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