From 5a05980bafd398c3f3fd849db0f4f4121923b05f Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Wed, 30 Nov 2022 22:32:07 +0800 Subject: [PATCH] executor: fix data race on the IndexMergeReaderExecutor Signed-off-by: Weizhen Wang --- executor/index_merge_reader.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/executor/index_merge_reader.go b/executor/index_merge_reader.go index 5bf0a15a6d7f8..cf8f4296f0ead 100644 --- a/executor/index_merge_reader.go +++ b/executor/index_merge_reader.go @@ -68,13 +68,14 @@ var ( type IndexMergeReaderExecutor struct { baseExecutor - table table.Table - indexes []*model.IndexInfo - descs []bool - ranges [][]*ranger.Range - dagPBs []*tipb.DAGRequest - startTS uint64 - tableRequest *tipb.DAGRequest + table table.Table + indexes []*model.IndexInfo + descs []bool + ranges [][]*ranger.Range + dagPBs []*tipb.DAGRequest + startTS uint64 + tableRequestMu sync.Mutex + tableRequest *tipb.DAGRequest // columns are only required by union scan. columns []*model.ColumnInfo *dataReaderBuilder @@ -631,9 +632,12 @@ func (e *IndexMergeReaderExecutor) buildFinalTableReader(ctx context.Context, tb netDataSize: e.dataAvgRowSize * float64(len(handles)), } if e.isCorColInTableFilter { + e.tableRequestMu.Lock() if tableReaderExec.dagPB.Executors, err = constructDistExec(e.ctx, e.tblPlans); err != nil { + e.tableRequestMu.Unlock() return nil, err } + e.tableRequestMu.Unlock() } tableReaderExec.buildVirtualColumnInfo() // Reorder handles because SplitKeyRangesByLocations() requires startKey of kvRanges is ordered.