goatcorp / Dalamud

FFXIV plugin framework and API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Entrypoint Injection can time out due to slow or faulty I/O

KazWolfe opened this issue · comments

We've had two users report this particular issue in Discord now, so creating an Issue for logging purposes.

When using entrypoint injection (in-UI referred to as "new injection") with an invalid or slow D:\ drive (e.g. a 5400 RPM disk or faulty SD card reader), the game will hang indefinitely attempting to load PDBs. This appears to be inconsistent in and of itself, but is otherwise apparently related to some I/O concerns.

Memory dumps show that the game hangs in NtCreateFile called via dbghelp.dll either within a CLR kick-off thread or the game's own thread as part of setting up the in-game error handler:

image

In both cases, the referenced PDB path being loaded was being pulled from the D:\ drive at a CI-based path:

image

This may be the result of a double-initialization of symbols, but is unclear at this time. For all affected users, this only happens when loading Dalamud with entrypoint injection; legacy mode does not experience this problem and the game sans Dalamud also loads normally.

For any users being redirected to this particular issue, you can work around this bug by:

  • Moving the drive assigned to D:\ to any other drive letter.
  • Disconnecting the drive assigned to D:\.
  • Using legacy injection.

Please note that D:\ may be assigned to a fake or volumeless drive (e.g. D:\ may be reserved for a plugged in but unused SD card reader) which may not show up in the File Explorer. If this is the case, tools like diskmgmt.msc or devmgmt.msc may help indicate what is using that drive.