util: avoid spilling to disk after rowContainer has been closed. (#19750)
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user