Skip to content

Commit d1bcf2d

Browse files
committed
GPU TPC bugfix: break cyclic merged track graphs
1 parent af3a333 commit d1bcf2d

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,7 +1772,11 @@ GPUd() void GPUTPCGMMerger::PrepareForFit1(int32_t nBlocks, int32_t nThreads, in
17721772
if (!trk.CCE() && !trk.MergedLooper()) {
17731773
GPUTPCGMMergedTrack* updTrk = &trk;
17741774
while (updTrk->PrevSegment() >= 0) {
1775-
updTrk = &mMergedTracks[updTrk->PrevSegment()];
1775+
auto next = &mMergedTracks[updTrk->PrevSegment()];
1776+
if (next == &trk) {
1777+
break;
1778+
}
1779+
updTrk = next;
17761780
}
17771781
const auto &cl0 = mClusters[trk.FirstClusterRef()], &cln = mClusters[updTrk->FirstClusterRef() + updTrk->NClusters() - 1];
17781782
const auto& GPUrestrict() cls = GetConstantMem()->ioPtrs.clustersNative->clustersLinear;
@@ -1781,7 +1785,11 @@ GPUd() void GPUTPCGMMerger::PrepareForFit1(int32_t nBlocks, int32_t nThreads, in
17811785
trk.Param().ShiftZ(this, cl0.sector, tmp[0], tmp[1], tmp[2]);
17821786
updTrk = &trk;
17831787
while (updTrk->PrevSegment() >= 0) {
1784-
updTrk = &mMergedTracks[updTrk->PrevSegment()];
1788+
auto next = &mMergedTracks[updTrk->PrevSegment()];
1789+
if (next == &trk) {
1790+
break;
1791+
}
1792+
updTrk = next;
17851793
updTrk->Param().TOffset() = trk.Param().TOffset();
17861794
}
17871795
}

GPU/GPUTracking/Merger/GPUTPCGMO2Output.cxx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,11 @@ GPUdii() void GPUTPCGMO2Output::Thread<GPUTPCGMO2Output::output>(int32_t nBlocks
214214
if (track.PrevSegment() >= 0) {
215215
const GPUTPCGMMergedTrack* chkTrk = &tracks[track.PrevSegment()];
216216
while (chkTrk->PrevSegment() >= 0) {
217-
chkTrk = &tracks[chkTrk->PrevSegment()];
217+
auto next = &tracks[chkTrk->PrevSegment()];
218+
if (next == &track) {
219+
break;
220+
}
221+
chkTrk = next;
218222
}
219223
const auto& firstPrevCluster = trackClusters[chkTrk->FirstClusterRef()];
220224
t1 = clusters->clustersLinear[firstPrevCluster.num].getTime();

0 commit comments

Comments
 (0)