Page 1 of 1

[Dominik][0.17.62] Changing fluid-consuming recipe of ghost causes crash

Posted: Sat Aug 03, 2019 5:36 am
by zjg
I laid down a blueprint containing fluid-consuming furnaces (bob's mods), then cleared the recipe while the furnace was still a ghost (via copy-paste from another empty furnace). After the furnace was built via bots, I right-click copy/paste a new fluid-consuming recipe from another furnace. This caused both 0.17.47 and 0.17.62 to crash on an "Error FluidBoxManager.cpp:572: this->doneSetup was not true" assertion.

I don't think this is a duplicate of the other bugs I could find related to this assertion, since they were all resolved months ago.

Detailed repro steps:
1- copy the stack of gold furnaces (already saved as a blueprint in the save; toolbelt slot 2)
2- paste blueprint nearby; some of the furnaces should be ghosts, due to incoming bots
3- clear recipe from one furnace that was built from personal bots (open furnace GUI; change recipe; exit recipe GUI)
4- use blueprint-copy (ctrl-c) to copy that one empty furnace
5- paste empty furnace onto other ghost furnaces, so that the pipes are no longer expecting chlorine
6- open first furnace, change recipe to any other fluid-consuming recipe
7- copy settings for the new recipe furnace (shift-right-click)
8- wait for the incoming bots to build the rest of the furnaces
9- paste settings into other furnaces (shift-left-click)
10- crashes on one of the furnaces whose recipe was changed while it was a ghost

Relevant log excerpt:

Code: Select all

Factorio crashed. Generating symbolized stacktrace, please wait ...
c:\cygwin64\tmp\factorio-build-c3ygos\src\fluid\fluidboxmanager.cpp (572): FluidBoxManager::onDestroy
c:\cygwin64\tmp\factorio-build-c3ygos\src\fluid\fluidboxmanager.cpp (606): FluidBoxManager::reset
c:\cygwin64\tmp\factorio-build-c3ygos\src\entity\assemblingmachine.cpp (750): AssemblingMachine::checkFluidMixingWithRecipe
c:\cygwin64\tmp\factorio-build-c3ygos\src\entity\assemblingmachine.cpp (432): AssemblingMachine::setupForCrafting
c:\cygwin64\tmp\factorio-build-c3ygos\src\entity\assemblingmachine.cpp (903): AssemblingMachine::copyEntitySettings
c:\cygwin64\tmp\factorio-build-c3ygos\src\manualbuilder.cpp (1306): ManualBuilder::pasteEntitySettings
c:\cygwin64\tmp\factorio-build-c3ygos\src\gameactionhandler.cpp (1246): GameActionHandler::pasteEntitySettings
c:\cygwin64\tmp\factorio-build-c3ygos\src\gameactionhandler.cpp (328): GameActionHandler::actionPerformed
c:\cygwin64\tmp\factorio-build-c3ygos\src\input\inputhandler.cpp (61): InputHandler::flushActions
c:\cygwin64\tmp\factorio-build-c3ygos\src\gameactionhandler.cpp (371): GameActionHandler::update
c:\cygwin64\tmp\factorio-build-c3ygos\src\mainloop.cpp (1185): MainLoop::gameUpdateStep
c:\cygwin64\tmp\factorio-build-c3ygos\src\mainloop.cpp (1060): MainLoop::gameUpdateLoop
c:\cygwin64\tmp\factorio-build-c3ygos\src\util\workerthread.cpp (42): WorkerThread::loop
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\thr\xthread (230): std::_LaunchPad<std::unique_ptr<std::tuple<void (__cdecl MapGenerationHelper::*)(void),MapGenerationHelper *>,std::default_delete<std::tuple<void (__cdecl MapGenerationHelper::*)(void),MapGenerationHelper *> > > >::_Go
c:\program files (x86)\microsoft visual studio\2017\buildtools\vc\tools\msvc\14.15.26726\include\thr\xthread (209): std::_Pad::_Call_func
minkernel\crts\ucrt\src\appcrt\startup\thread.cpp (115): thread_start<unsigned int (__cdecl*)(void * __ptr64)>
ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 0000000076EF556D)
0000000076EF556D (kernel32): (filename not available): BaseThreadInitThunk
ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 000000007715385D)
000000007715385D (ntdll): (filename not available): RtlUserThreadStart
Stack trace logging done
 117.748 Error FluidBoxManager.cpp:572: this->doneSetup was not true
Let me know if there's anything else you need from me. Thanks!

Re: [Dominik][0.17.62] Changing fluid-consuming recipe of ghost causes crash

Posted: Wed Aug 14, 2019 12:43 pm
by Dominik
Hi, thanks for the report. Quite a simple bug related to the assembler only having one fluidbox when disabled.