Dovahzul

Untitled

Sep 3rd, 2026
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. HeadpartExtended.dll crash: null actor pointer in MyHooks::updateFace3d (background queue thread)
  2.  
  3. === CRASH DETAILS ===
  4. Fallout 4 v1.10.163
  5. Unhandled exception "EXCEPTION_ACCESS_VIOLATION"
  6. Location: HeadpartExtended.dll+00BD1D6
  7. Instruction: mov rax, [rax+0x3B8]
  8. Source: main.cpp:319, void MyHooks::updateFace3d(RE::Actor *)
  9. Crash Thread ID: 11944
  10. Access Violation: Tried to read memory at 0x0000000003B8 (rax = 0x0, i.e. null actor pointer)
  11. Exception Flags: 0x00000000 (Continuable)
  12.  
  13. Call stack (top frames):
  14. [0] HeadpartExtended.dll+00BD1D6 MyHooks::updateFace3d(RE::Actor*) main.cpp:319
  15. [1] HeadpartExtended.dll+002961C MyHooks::callNextInQueue(void) main.cpp:627
  16. [2] HeadpartExtended.dll+0062920 std::invoke<void(*)(void)>(...)
  17. [3] HeadpartExtended.dll+004A429 std::thread::_Invoke<...>(...)
  18. [4] HeadpartExtended.dll+01C935F __crt_internal_free_policy::operator()(...)
  19.  
  20. === ANALYSIS ===
  21. The crash occurs on a background worker thread (std::thread) processing a
  22. queue of pending face-update jobs via callNextInQueue -> updateFace3d.
  23. The Actor* passed to updateFace3d is null, causing the read at offset 0x3B8
  24. to fault.
  25.  
  26. The mod's own debug log (HeadpartExtended.log) for the crashing thread
  27. (11944) confirms this: its final entry before the crash is
  28. "call next in queue" with NO subsequent log lines (no Reset3D, no NPC
  29. lookup, no "is known"/"is a preset" checks) - meaning the thread dequeued
  30. an item and crashed immediately trying to use the actor pointer, before
  31. reaching any point where it would normally log the actor's identity.
  32.  
  33. This looks like a stale/invalidated Actor* being left in the queue -
  34. e.g. an actor disabled, unloaded, or deleted between being enqueued and
  35. being processed by the worker thread, with no null-check/validity check
  36. before use in updateFace3d.
  37.  
  38. === LOG EXCERPT: thread 11944 activity leading up to crash ===
  39. (full HeadpartExtended.log is ~1.16MB; this is the relevant excerpt)
  40.  
  41. [15:40:34.971] [11944] [D] call next in queue
  42. [15:40:34.971] [11944] [D] Reset3D called for 001FE328
  43. [15:40:34.971] [11944] [D] call next in queue
  44. [15:40:34.971] [11944] [D] DoOnQueueMe() Called
  45. [15:40:34.971] [11944] [D] 3500D5CC_REF was found
  46. [15:40:34.971] [11944] [D] 3500D5CC_Act was found
  47. [15:40:34.971] [11944] [D] FF007697_NPC was found
  48. [15:40:34.971] [11944] [D] 4F03A8FB_RootNPC was found
  49. [15:40:34.971] [11944] [D] 4F03A8FB_RootNPC is known
  50. [15:40:34.971] [11944] [D] FE05886C_headpart removed from 3500D5CC
  51. [15:40:34.971] [11944] [D] 3500D5CC_Act is known
  52. [15:40:34.971] [11944] [D] FE05886C_headpart added to 3500D5CC
  53. [15:40:34.971] [11944] [D] FF007697_NPC is a preset
  54. [15:40:34.971] [11944] [D] FF007697_NPC is a preset
  55. [15:40:34.971] [11944] [D] Reset3D called for 3500D5CC
  56. [15:40:36.651] [11944] [D] call next in queue
  57. [15:40:36.651] [11944] [D] Reset3D called for 1CC1E23F
  58. [15:40:36.732] [11944] [D] call next in queue
  59. [15:40:36.732] [11944] [D] Reset3D called for 1CC1E240
  60. [15:40:38.453] [11944] [D] call next in queue
  61. --- thread 11944 has no further log entries; crash occurs at 15:40:40 ---
  62.  
  63. === SYSTEM CONTEXT ===
  64. Process Uptime at crash: 01:22:52
  65. Heavily modded load order (700+ plugins), multiple worker threads
  66. (11944, 16276, 9104, etc.) concurrently hammering the same
  67. Attach()/lock/unlock cycle on other actors at the same time, suggesting
  68. high queue throughput/contention may make the race condition easier to
  69. hit.
  70.  
  71. This crash has been reproduced across at least two other, unrelated
  72. instances (different hairstyle mods, different NPCs) where the same
  73. background queue eventually led to a crash deeper in cloth-physics
  74. attachment code (hclClothInstance::setTransformSet) rather than at the
  75. null-actor-pointer stage itself - consistent with the same root cause
  76. surfacing at different points depending on timing.
Advertisement
Add Comment
Please, Sign In to add comment