Skip to content

Commit 2d7869c

Browse files
committed
Fix: avoid dereferencing future flatBuffer address
1 parent 7c094c7 commit 2d7869c

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

Detectors/Base/include/DetectorsBase/MatLayerCylSet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class MatLayerCylSet : public o2::gpu::FlatObject
104104
using o2::gpu::FlatObject::releaseInternalBuffer;
105105

106106
void fixPointers(char* newPtr = nullptr);
107-
void fixPointers(char* oldPtr, char* newPtr);
107+
void fixPointers(char* oldPtr, char* newPtr, bool newPtrValid = true);
108108

109109
/// Gives minimal alignment in bytes required for the class object
110110
static constexpr size_t getClassAlignmentBytes() { return 8; }

Detectors/Base/src/MatLayerCylSet.cxx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ void MatLayerCylSet::setFutureBufferAddress(char* futureFlatBufferPtr)
449449
{
450450
/// Sets the actual location of the external flat buffer before it was created
451451
///
452-
fixPointers(mFlatBufferPtr, futureFlatBufferPtr);
452+
fixPointers(mFlatBufferPtr, futureFlatBufferPtr, false); // flag that futureFlatBufferPtr is not valid yet
453453
flatObject::setFutureBufferAddress(futureFlatBufferPtr);
454454
}
455455

@@ -484,16 +484,19 @@ void MatLayerCylSet::fixPointers(char* newBasePtr)
484484
}
485485

486486
//______________________________________________
487-
void MatLayerCylSet::fixPointers(char* oldPtr, char* newPtr)
487+
void MatLayerCylSet::fixPointers(char* oldPtr, char* newPtr, bool newPtrValid)
488488
{
489489
// fix pointers on the internal structure of the flat buffer after retrieving it from the file
490+
auto* layPtr = get()->mLayers;
490491
get()->mLayers = flatObject::relocatePointer(oldPtr, newPtr, get()->mLayers);
491492
get()->mR2Intervals = flatObject::relocatePointer(oldPtr, newPtr, get()->mR2Intervals);
492493
get()->mInterval2LrID = flatObject::relocatePointer(oldPtr, newPtr, get()->mInterval2LrID);
493-
494+
if (newPtrValid) {
495+
layPtr = get()->mLayers;
496+
}
494497
for (int i = 0; i < getNLayers(); i++) {
495-
get()->mLayers[i].setFlatPointer(flatObject::relocatePointer(oldPtr, newPtr, get()->mLayers[i].getFlatBufferPtr()));
496-
get()->mLayers[i].fixPointers(oldPtr, newPtr);
498+
layPtr[i].setFlatPointer(flatObject::relocatePointer(oldPtr, newPtr, layPtr[i].getFlatBufferPtr()));
499+
layPtr[i].fixPointers(oldPtr, newPtr);
497500
}
498501
}
499502
#endif // !GPUCA_GPUCODE

0 commit comments

Comments
 (0)