Physics ExportCollisionEvent Nativestream memory leak

Hi. Out project uses physics 0.51.1 + unity 2021.3.35f1 and we have some strange memory leaks from Physics package if mutithreaded flag is checked.

Profiling ios seems to point to native stream allocation

byte* eventPtr = collisionEventsWriter.Allocate(collisionEventSize);

inside

private unsafe void ExportCollisionEvent(float totalAccumulatedImpulse, [NoAlias] ref JacobianHeader jacHeader, [NoAlias] ref NativeStream.Writer collisionEventsWriter)

However this happens on our linux server builds, too. Disabled mutithreading flag fixes leak and we use this as temporary fix, but this doesnt solve problem right way. I found leak when added around 1000 dynamic colliders interacting with each other and static environment.
It leaks quickly with rate around 2.5-3mb/sec at 30 Hz physics

detailed stacktrace below

Leak detector stacktrace

Unity.Jobs.IJobParallelForDeferExtensions.JobParallelForDeferProducer`1<Unity.Physics.Solver.ParallelSolverJob>.Execute(ref Unity.Physics.Solver.ParallelSolverJob jobData, System.IntPtr additionalPtr, System.IntPtr bufferRangePatchData, ref Unity.Jobs.LowLevel.Unsafe.JobRanges ranges, int jobIndex)

Unity.Physics.Solver, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.Solve(Unity.Collections.NativeArray`1[[Unity.Physics.MotionVelocity, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null motionVelocities, Unity.Collections.NativeStream+Reader&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null jacobianReader, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null collisionEventsWriter, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null triggerEventsWriter, System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 workItemIndex, Unity.Physics.Solver+StepInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null stepInput, Unity.Physics.Solver+StabilizationData, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null solverStabilizationData)

Unity.Physics.JacobianHeader, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.Solve(Unity.Physics.JacobianHeader*, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null this, Unity.Physics.MotionVelocity&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null velocityA, Unity.Physics.MotionVelocity&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null velocityB, Unity.Physics.Solver+StepInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null stepInput, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null collisionEventsWriter, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null triggerEventsWriter, System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 enableFrictionVelocitiesHeuristic, Unity.Physics.Solver+MotionStabilizationInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null motionStabilizationSolverInputA, Unity.Physics.Solver+MotionStabilizationInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null motionStabilizationSolverInputB)

Unity.Physics.ContactJacobian, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.SolveContact(Unity.Physics.ContactJacobian*, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null this, Unity.Physics.JacobianHeader&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null jacHeader, Unity.Physics.MotionVelocity&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null velocityA, Unity.Physics.MotionVelocity&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null velocityB, Unity.Physics.Solver+StepInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null stepInput, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null collisionEventsWriter, System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 enableFrictionVelocitiesHeuristic, Unity.Physics.Solver+MotionStabilizationInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null motionStabilizationSolverInputA, Unity.Physics.Solver+MotionStabilizationInput, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null motionStabilizationSolverInputB)

Unity.Physics.ContactJacobian, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.ExportCollisionEvent(Unity.Physics.ContactJacobian*, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null this, System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 totalAccumulatedImpulse, Unity.Physics.JacobianHeader&, Unity.Physics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null jacHeader, Unity.Collections.NativeStream+Writer&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null collisionEventsWriter)

UnsafeUtility_CUSTOM_Malloc(long long, int, NativeCollection::Allocator)

We don’t develop this old experimental version anymore. Can you try in a newer version such as 1.1 or 1.2, please?

1 Like