Skip to content

Commit d8a7c0e

Browse files
committed
Don't let RefreshTileset destroy immediately
1 parent 1d7efee commit d8a7c0e

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log {#changes}
22

3+
### ? - ?
4+
5+
##### Fixes :wrench:
6+
7+
- Fixed an access violation that could occur if `ACesium3DTileset::RefreshTileset` was invoked in a callback for asynchronous actions.
8+
39
### v2.22.1 - 2026-01-05
410

511
##### Fixes :wrench:

Source/CesiumRuntime/Private/Cesium3DTileset.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ ACesium3DTileset::ACesium3DTileset()
8282
CreditSystem(nullptr),
8383

8484
_pTileset(nullptr),
85+
_destroyOnNextTick(false),
8586

8687
#ifdef CESIUM_DEBUG_TILE_STATES
8788
_pStateDebug(nullptr),
@@ -130,6 +131,7 @@ ACesium3DTileset::ACesium3DTileset()
130131
}
131132

132133
ACesium3DTileset::~ACesium3DTileset() { this->DestroyTileset(); }
134+
133135
PRAGMA_ENABLE_DEPRECATION_WARNINGS
134136

135137
TSoftObjectPtr<ACesiumGeoreference> ACesium3DTileset::GetGeoreference() const {
@@ -339,7 +341,7 @@ void ACesium3DTileset::InvalidateResolvedCameraManager() {
339341
this->RefreshTileset();
340342
}
341343

342-
void ACesium3DTileset::RefreshTileset() { this->DestroyTileset(); }
344+
void ACesium3DTileset::RefreshTileset() { this->_destroyOnNextTick = true; }
343345

344346
void ACesium3DTileset::TroubleshootToken() {
345347
OnCesium3DTilesetIonTroubleshooting.Broadcast(this);
@@ -2020,6 +2022,11 @@ void ACesium3DTileset::Tick(float DeltaTime) {
20202022
return;
20212023
}
20222024

2025+
if (this->_destroyOnNextTick) {
2026+
this->DestroyTileset();
2027+
this->_destroyOnNextTick = false;
2028+
}
2029+
20232030
if (!this->_pTileset) {
20242031
LoadTileset();
20252032

Source/CesiumRuntime/Public/Cesium3DTileset.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,6 +1380,7 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
13801380

13811381
private:
13821382
TUniquePtr<Cesium3DTilesSelection::Tileset> _pTileset;
1383+
bool _destroyOnNextTick;
13831384

13841385
#ifdef CESIUM_DEBUG_TILE_STATES
13851386
TUniquePtr<Cesium3DTilesSelection::DebugTileStateDatabase> _pStateDebug;

0 commit comments

Comments
 (0)