I had this happen on one of my first few warps. I got a stack trace using commands below (and can reproduce it with the save that I have). It is potentially worth opening a bug report on the factorio forums, if only to help track it down. One possible theory is that with some terrain generation settings, perhaps there is no guarantee that surface.force_generate_chunk_requests()
will ever finish (i.e. if on_chunk_generated ends up placing entities that overlap the next chunk or something? but this is really just a random guess). It feels at least conceptually possible to me that MacOS and Windows might use different thread-synchronization behaviors, where perhaps MacOS will always let the chunk-generating-threads do more work next, and Windows is more random and sometimes allows the force_generate_chunk_requests() call to complete before more work has been scheduled in some way, but again, this is just a total guess?
# to find the correct PID
ps aux |grep factorio
# then pass that pid in this command
sudo sample 91815 10 -file factorio_sample.txt
# here is the main/interesting thread
5107 Thread_35281916: GameUpdate
+ 5107 thread_start (in libsystem_pthread.dylib) + 8 [0x185cef0fc]
+ 5107 _pthread_start (in libsystem_pthread.dylib) + 136 [0x185cf42e4]
+ 5107 std::__thread_proxy[abi:v160006]<std::tuple<std::unique_ptr<std::__thread_struct>, void (WorkerThread::*)(), WorkerThread*>>(void*) (in factorio) + 72 [0x1029898d0] thread:293
+ 5107 WorkerThread::loop() (in factorio) + 172 [0x1020fa99c] WorkerThread.cpp:70
+ 5107 MainLoop::gameUpdateLoop(MainLoop::HeavyMode) (in factorio) + 784 [0x1009f8b18] MainLoop.cpp:1211
+ 5107 MainLoop::gameUpdateStep(MultiplayerManagerBase*, Scenario*, AppManager*, MainLoop::HeavyMode) (in factorio) + 2580 [0x1009fd304] MainLoop.cpp:1416
+ 5107 Scenario::update() (in factorio) + 392 [0x101cd5b10] Scenario.cpp:1213
+ 5107 LuaContext::update() (in factorio) + 88 [0x101cd6800] LuaContext.cpp:180
+ 5107 LuaEventDispatcher::dispatch(MapTick) (in factorio) + 900 [0x101d15ac8] LuaEventDispatcher.cpp:155
+ 5107 LuaGameScript::runNthTickHandler(MapTick) (in factorio) + 312 [0x101d84654] LuaGameScript.cpp:720
+ 5107 lua_pcallk (in factorio) + 332 [0x102b82050] lapi.c:1094
+ 5107 luaD_pcall(lua_State*, void (*)(lua_State*, void*), void*, long, long) (in factorio) + 56 [0x102b8c40c] ldo.c:625
+ 5107 luaD_rawrunprotected(lua_State*, void (*)(lua_State*, void*), void*) (in factorio) + 60 [0x102b8b688] ldo.c:137
+ 5107 luaD_call(lua_State*, lua_TValue*, int, int) (in factorio) + 156 [0x102b8b8d8] ldo.c:426
+ 5107 luaV_execute(lua_State*) (in factorio) + 2496 [0x102b6f0d4] lvm.c:717
+ 5107 luaD_precall(lua_State*, lua_TValue*, int) (in factorio) + 620 [0x102b8be9c] ldo.c:350
+ 5107 LuaBinder<LuaSurface>::callWrapperOnObject(lua_State*, LuaSurface*, int) (in factorio) + 80 [0x1028950f0] LuaBinder.hpp:281
+ 5107 LuaSurface::luaForceGenerateChunkRequests(lua_State*) (in factorio) + 20 [0x101e9c424] LuaSurface.cpp:2066
+ 5107 MapGenerationManager::generateAllSynchronously(Surface&) (in factorio) + 1040 [0x101b68cc0] MapGenerationManager.cpp:301
+ 5107 MapGenerationManager::AsyncHelper::generateAllOfStatus<AsyncEntityTask, (ChunkGeneratedStatus::Enum)50>(std::array<std::deque<MapGenerationRequest>, 4ul> const&, unsigned long, Surface&) (in factorio) + 1044 [0x101b6b1d4] MapGenerationManager.cpp:247
+ 5105 std::this_thread::sleep_for(std::chrono::duration<long long, std::ratio<1l, 1000000000l>> const&) (in factorio) + 64 [0x100742250]
# and there were many threads that looked like this:
5107 Thread_35317293
+ 5107 thread_start (in libsystem_pthread.dylib) + 8 [0x185cef0fc]
+ 5107 _pthread_start (in libsystem_pthread.dylib) + 136 [0x185cf42e4]
+ 5107 std::__thread_proxy[abi:v160006]<std::tuple<std::unique_ptr<std::__thread_struct>, void (std::__async_assoc_state<void, std::__async_func<AsyncEntityTask::AsyncEntityTask(ChunkPosition const&, Surface&, std::atomic<unsigned long>&)::'lambda'()>>::*)(), std::__async_assoc_state<void, std::__async_func<AsyncEntityTask::AsyncEntityTask(ChunkPosition const&, Surface&, std::atomic<unsigned long>&)::'lambda'()>>*>>(void*) (in factorio) + 72 [0x1027ceacc] thread:293
+ 5107 std::__async_assoc_state<void, std::__async_func<AsyncEntityTask::AsyncEntityTask(ChunkPosition const&, Surface&, std::atomic<unsigned long>&)::'lambda'()>>::__execute() (in factorio) + 32 [0x1027cea00] future:1008
+ 5107 EntityMapGenerationTask::computeInternal() (in factorio) + 104 [0x101b43c70] EntityMapGenerationTask.cpp:134
+ 5104 Noise::multioctaveNoise(float, float, unsigned int, unsigned int, float, float, float, float, float, NoiseScratch&, float*) const (in factorio) + 332 [0x101c59e84] Noise.cpp:419
+ ! 2093 Noise::noise(float, float, unsigned int, unsigned int, float, float, float, NoiseScratch&, float*) const (in factorio) + 900,904,... [0x101c597bc,0x101c597c0,...] Noise.cpp:197
+ ! 1242 Noise::noise(float, float, unsigned int, unsigned int, float, float, float, NoiseScratch&, float*) const (in factorio) + 864,836,... [0x101c59798,0x101c5977c,...] Noise.cpp:236