This IS related, in fact I've found the cause, and it is definitely caused by bugs in the QT version of Bitcoin Core (that version has severe synchronization issues across threads, and generates uncaught deadlocks exceptions, causing some race bugs in some conditions, or unchecked conduitions based on incorrect assumtion about order of execution of events, and in some cases may be caused by some remote agents using slightly different implemetnations of the protocol and making non-sense requests out of order.
Notably the QT engine conflicts with the LevelBL engine, and can corrupt its working state, especially during the IBD phase where there are LOT of I/O made by LevelDB, and many concurrent threads, that Qt manages incorrectly; there are also some unsafe "quirks" made by the Qt engine, notably in the memory allocator, some parts of been not be ing properly isolated, as well Qt seems to take the priority on all locks made by LevelDB, but LevelDB some times need to hold multiple successible locks on files or on the thread scheduling).
For now the solution is to NOT make the IBD phase within the Qt version. You can start it there. But then exit the Qt app, and ontinue the IBD with bitcoin daamon until "bitcoin-cli getinfo" reports that the IBD is complete.
At this time, the QT version will be generally safe before there will be much less interactions and the LevelDB databases for the blockchain or other indexes will be restructured much less often. Something is wrong in the model allowing the Qt VM and the RPC/IPC mechanism to interoperate and manage their own sets of threads.
This is NOT specific to Windows: I've seen exactly the same thing with a Linux version (either in a native machine, or in a VM, or in WSL).
Bitcoin developers admit themsevles that the Qt version is not well tested (most tests are performed in the daemon version, but there are still other tests to be written; there are many bugs to solve in GitHub, including various race conditions inside dependencies: Qt, LevelDB, GCC and its build chain)
Those bugs are NOT caused by the hardware as indicated; they can occur at anytime and are very hard to test and predict. But developers are trying to restructure Bitcoin Core into more manageable submodules that can be safely tested; but some modules in Bitcoind Core are really huge and perform too many unrelated things.
As the user (even if he tries on a Macbook Pro) is asking for hints, I really suggests him to use the daemon and not the Qt-based UI, especially for syncing. This is much faster and much less error prone.
But he will have first to close the QT UI, wait until it termiantes flushing the data to disk, then launch the dameon in a shell window and let it run in the background, and can look at its progress by opening a secondary shell to use "bitcloin-cli -getinfo".
Once this info indicates the node is in sync, he can stop the daemon (press Cmd+C once, wait until you get the prompt after the daemon flushes its state to disk), and can restart using the QT UI after that.
Note that if logs indicate corruption in transactions, he has to delete the index files for transactions; if this does not work, he has to use the "-reindex-chainstate" flag; if this still does not work he has to delete the corrupted block indicated (and all the following ones, i.e. "blk0*.dat", and all undo files "rev0*.dat with the same starting number, and the 2 special metadata files in the block folder) and relaunch the daemon (avoid retrying with the QT UI) with "-reindex" which will restart the IBD sync.
blocks
directory previously as it stalled before. This has happened several times now syncing from scratch. Would this be a hardware issue at this point? I can sync on other machines just fine. – Andrew Toth Jul 07 '17 at 14:12