util: avoid spilling to disk after rowContainer has been closed. (#19750)

This commit is contained in:
Shenghui Wu
2020-09-09 13:04:52 +08:00
committed by GitHub
parent f9b71fca1f
commit 0c822d13a1

View File

@ -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