Skip to content

Vrm10FastSpringboneRuntime does not dispose correctly #2616

Closed
@TigerHix

Description

@TigerHix

public void Dispose()
{
if (m_fastSpringBoneBuffer != null)
{
m_fastSpringBoneService.BufferCombiner.Register(add: null, remove: m_fastSpringBoneBuffer);
m_fastSpringBoneBuffer.Dispose();
}
}

The Dispose() method is incorrectly implemented. On re-entry, this method will crash Unity runtime due to disallocating a native array twice.

The fix is simply:

public void Dispose()
{
    if (m_fastSpringBoneBuffer != null)
    {
        m_fastSpringBoneService.BufferCombiner.Unregister(m_fastSpringBoneBuffer);
        m_fastSpringBoneBuffer.Dispose();
        m_fastSpringBoneBuffer = null; // Add this line
    }
}

Same situation in Vrm10FastSpringboneRuntimeStandalone:

public void Dispose()
{
m_bufferCombiner.Register(add: null, remove: m_fastSpringBoneBuffer);
m_fastSpringBoneBuffer.Dispose();
m_fastSpringBoneScheduler.Dispose();
m_bufferCombiner.Dispose();
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions