@@ -1059,8 +1059,9 @@ int32_t GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
10591059 return ;
10601060 }
10611061
1062- if (propagateMCLabels && fragment.index == 0 ) {
1063- clusterer.PrepareMC ();
1062+ if (propagateMCLabels) {
1063+ // AllocMCBuffers must be called for every fragment, to clear leftovers from previous fragment
1064+ clusterer.AllocMCBuffers ();
10641065 clusterer.mPinputLabels = digitsMC->v [iSector];
10651066 if (clusterer.mPinputLabels == nullptr ) {
10661067 GPUFatal (" MC label container missing, sector %d" , iSector);
@@ -1455,12 +1456,12 @@ int32_t GPUChainTracking::RunTPCClusterizer(bool synchronizeOutput)
14551456 runKernel<GPUTPCCFMCLabelFlattener, GPUTPCCFMCLabelFlattener::setRowOffsets>({GetGrid (GPUTPCGeometry::NROWS , lane, GPUReconstruction::krnlDeviceType::CPU ), {iSector}});
14561457 GPUTPCCFMCLabelFlattener::setGlobalOffsetsAndAllocate (clusterer, mcLinearLabels);
14571458 runKernel<GPUTPCCFMCLabelFlattener, GPUTPCCFMCLabelFlattener::flatten>({GetGrid (GPUTPCGeometry::NROWS , lane, GPUReconstruction::krnlDeviceType::CPU ), {iSector}}, &mcLinearLabels);
1458- clusterer.clearMCMemory ();
1459+ clusterer.FreeMCBuffers ();
14591460 assert (propagateMCLabels ? mcLinearLabels.header .size () == nClsTotal : true );
14601461 }
14611462 if (propagateMCLabels) {
14621463 for (int32_t lane = 0 ; lane < maxLane; lane++) {
1463- processors ()->tpcClusterer [iSectorBase + lane].clearMCMemory ();
1464+ processors ()->tpcClusterer [iSectorBase + lane].FreeMCBuffers ();
14641465 }
14651466 }
14661467 if (buildNativeHost && buildNativeGPU && anyLaneHasData) {
0 commit comments