summaryrefslogtreecommitdiff
path: root/src/openttd.cpp
diff options
context:
space:
mode:
authorJonathan G Rennison <j.g.rennison@gmail.com>2019-01-22 18:31:08 +0000
committerPatric Stout <github@truebrain.nl>2020-12-22 15:17:57 +0100
commit0c5dc5d41eff0ac0a62dd67882a718bb3c99ec3a (patch)
treeae5c1cb8322cd28fa627f942fb93d59f5029cfe3 /src/openttd.cpp
parent9a45a0f535e312cd97db12c3a2ec1068fa381136 (diff)
downloadopenttd-0c5dc5d41eff0ac0a62dd67882a718bb3c99ec3a.tar.xz
Change: [Linkgraph] Pause the game when linkgraph jobs lag (#6470)
Check if the job is still running two date fract ticks before it is due to join, and if so pause the game until its done. When loading a game, check if the game would block immediately due to a job which is scheduled to be joined within two date fract ticks, and if so pause the game until its done. This avoids the main thread being blocked on a thread join, which appears to the user as if the game is unresponsive, as the UI does not repaint and cannot be interacted with. Show if pause is due to link graph job in status bar, update network messages. This does not apply for network clients.
Diffstat (limited to 'src/openttd.cpp')
-rw-r--r--src/openttd.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index 9cc5d2f20..e4fcf40e9 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -1355,6 +1355,10 @@ static void CheckCaches()
*/
void StateGameLoop()
{
+ if (!_networking || _network_server) {
+ StateGameLoop_LinkGraphPauseControl();
+ }
+
/* don't execute the state loop during pause */
if (_pause_mode != PM_UNPAUSED) {
PerformanceMeasurer::Paused(PFE_GAMELOOP);