A race condition occurs in the InitSplineVertexFactory_Internal }}function call, which is distributed across multiple threads. This causes {{FSplineMeshVertexFactory to be instantiated multiple times, each instance being stored in the same variable. As a result, all but the last instance leak.
A simple fix using a critical section for mutual exclusion, as shown below, suppresses the leak.
static FCriticalSection GInitSplineVertexFactoryCS; //work around - global critical section static void InitSplineVertexFactory_Internal(FStaticMeshVertexFactories& VertexFactories, const FStaticMeshVertexBuffers& VertexBuffers, int32 LightMapCoordinateIndex, const ERHIFeatureLevel::Type FeatureLevel, FColorVertexBuffer* InOverrideColorVertexBuffer) { // Skip LODs that have their render data stripped (eg. platform MinLod settings) if (VertexBuffers.StaticMeshVertexBuffer.GetNumVertices() == 0) { return; } bool bOverrideColorVertexBuffer = !!InOverrideColorVertexBuffer; FScopeLock Lock(&GInitSplineVertexFactoryCS); // work around if ((VertexFactories.SplineVertexFactory && !bOverrideColorVertexBuffer) || (VertexFactories.SplineVertexFactoryOverrideColorVertexBuffer && bOverrideColorVertexBuffer))
Result:
A large number of SplineMeshComponent VB/TB/TC entries are reported, indicating a leak.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-389807 in the post.
| 0 |
| Component | UE - Rendering - Features |
|---|---|
| Affects Versions | 5.6, 5.7, 5.8 |
| Created | Aug 3, 2026 |
|---|---|
| Updated | Aug 4, 2026 |