6's RhinoCore crashes on heavy-duty daylight calculation

I wrote a parallel daylight calculation in GH and the algorithm itself doesn’t involve any Rhino class except Point3d & Vector3d. Since 1-2 weeks ago Rhino would sometimes crash during such calculation.

The crash resides in RhinoCore, on a separated GC thread, and it seems something is double-freed, resulting in a corrupt heap. There’s plenty of free memory remaining.

Version

6.33.20343.16431, 12/08/2020

Tried the following without resolving the issue:

  • Turned off GH’s preview.
  • Disabled other plugins
  • Disabled History
  • Disabled Background(Concurrent) GC thru machine.config

Full memory dump

Sent through the support upload page.

!heap


  •                                                        *
    
  •              HEAP ERROR DETECTED                       *
    
  •                                                        *
    

Details:

Heap address: 0000024fe5c60000
Error address: 0000024fc7d2fcb0
Error type: HEAP_FAILURE_BLOCK_NOT_BUSY
Details: The caller performed an operation (such as a free
or a size check) that is illegal on a free block.
Follow-up: Check the error’s stack trace to find the culprit.

Stack trace:
Stack trace at 0x00007ffd34e51848
00007ffd34d8ed11: ntdll!RtlpLogHeapFailure+0x45
00007ffd34d9e2e0: ntdll!RtlFreeHeap+0x964a0
00007ffd30fdb38b: ucrtbase!_free_base+0x1b
00007ffcdd0d4deb: RhinoCore!CRhinoHistoryRecordTable::GetPrunedHistoryRecord+0x20db
00007ffcdd0d4eb8: RhinoCore!CRhinoHistoryRecordTable::GetPrunedHistoryRecord+0x21a8
00007ffce91395c3: opennurbs!ON_ObjRef::DecrementProxyReferenceCount+0x43
00007ffce9133ad7: opennurbs!ON_ObjRef::~ON_ObjRef+0x17
00007ffce973bea3: rhcommon_c!CRhinoObjRef_Delete+0x13
00007ffcbc7262f7: +0xbc7262f7

Stacktrace

[0x0] ntdll!NtWaitForMultipleObjects + 0x14
[0x1] ntdll!WerpWaitForCrashReporting + 0xa8
[0x2] ntdll!RtlReportExceptionHelper + 0x33e
[0x3] ntdll!RtlReportException + 0x9d
[0x4] ntdll!RtlReportFatalFailure$filt$0 + 0x33
[0x5] ntdll!_C_specific_handler + 0x96
[0x6] ntdll!RtlpExecuteHandlerForException + 0xf
[0x7] ntdll!RtlDispatchException + 0x40f
[0x8] ntdll!RtlRaiseException + 0x316
[0x9] ntdll!RtlReportFatalFailure + 0x9
[0xa] ntdll!RtlReportCriticalFailure + 0x97
[0xb] ntdll!RtlpHeapHandleError + 0x12
[0xc] ntdll!RtlpHpHeapHandleError + 0x7a
[0xd] ntdll!RtlpLogHeapFailure + 0x45
[0xe] ntdll!RtlFreeHeap + 0x964a0
[0xf] ucrtbase!_free_base + 0x1b
[0x10] RhinoCore!CRhinoHistoryRecordTable::GetPrunedHistoryRecord + 0x20db
[0x11] RhinoCore!CRhinoHistoryRecordTable::GetPrunedHistoryRecord + 0x21a8
[0x12] opennurbs!ON_ObjRef::DecrementProxyReferenceCount + 0x43
[0x13] opennurbs!ON_ObjRef::~ON_ObjRef + 0x17
[0x14] rhcommon_c!CRhinoObjRef_Delete + 0x13
[0x15] 0x7ffcbc7262f7
[0x16] 0x7ffcbc726260
[0x17] clr!FastCallFinalizeWorker + 0x6
[0x18] clr!FastCallFinalize + 0x55
[0x19] clr!MethodTable::CallFinalizer + 0xb5
[0x1a] clr!CallFinalizer + 0x5e
[0x1b] clr!FinalizerThread::DoOneFinalization + 0x95
[0x1c] clr!FinalizerThread::FinalizeAllObjects + 0x124
[0x1d] clr!FinalizerThread::FinalizerThreadWorker + 0xba
[0x1e] clr!ManagedThreadBase_DispatchInner + 0x40
[0x1f] clr!ManagedThreadBase_DispatchMiddle + 0x6c
[0x20] clr!ManagedThreadBase_DispatchOuter + 0x4c
[0x21] clr!FinalizerThread::FinalizerThreadStart + 0x116
[0x22] clr!Thread::intermediateThreadProc + 0x8b
[0x23] kernel32!BaseThreadInitThunk + 0x14
[0x24] ntdll!RtlUserThreadStart + 0x21

SystemInfo

Rhino 6 SR33 2020-12-8 (Rhino 6, 6.33.20343.16431, Git hash:master @ d492bef53a3f6a576db4d197feaaa7ddf0c7a653)
License type: 教育版, 版本2020-12-08
License details: Cloud Zoo. In use by: Keyu ()

Windows 10.0.0 SR0.0 or greater (Physical RAM: 16Gb)
Machine name: XXXXXX

Computer platform: DESKTOP

Standard graphics configuration.
Primary display and OpenGL: NVIDIA GeForce GTX 1050 (NVidia) Memory: 2GB, Driver date: 11-6-2020 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 457.30
> Accelerated graphics device with 4 adapter port(s)
- Windows Main Display attached to adapter port #0
- Secondary monitor attached to adapter port #1

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On

Anti-alias mode: 8x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 11-6-2020
Driver Version: 27.21.14.5730
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 2 GB

Rhino plugins
C:\Program Files\Rhino 6\Plug-ins\Commands.rhp “Commands” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 6\Plug-ins\RhinoRender.rhp “Rhino Render”
C:\Program Files\Rhino 6\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\rdk_ui.rhp “Renderer Development Kit UI”
C:\Program Files\Rhino 6\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 6\Plug-ins\IronPython\RhinoDLR_Python.rhp “IronPython” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\RhinoCycles.rhp “RhinoCycles” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\Grasshopper\GrasshopperPlugin.rhp “Grasshopper” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 6.33.20343.16431
C:\Program Files\Rhino 6\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\ProgramData\McNeel\Rhinoceros\6.0\Plug-ins\Twinmotion Direct Link 2020.2 (e24ee14a-9514-47da-8fe6-f6e61b20160e)\Twinmotion Direct Link 2020.rhp “Twinmotion Direct Link 2020” 1.0.6.0
C:\Program Files\Rhino 6\Plug-ins\Displacement.rhp “Displacement”
C:\Program Files\Common Files\McNeel\Rhinoceros\6.0\Plug-ins\SectionTools (fbdb1d7f-8cfb-42c1-9858-87cb6315932c)\2019.7.29.584\SectionTools.rhp “SectionTools”

If you could share the Grasshopper file privately (for instance directly here to me via PM) I can have a look.

1 Like

Thanks. I’m testing and I believe I may have resolved the issue.

will send you test files if problem persists

When testing says you’ve fixed the issue it’d be great if you could write up what the problem was and how you fixed it. It may be beneficial for other devs/users to know.