summaryrefslogtreecommitdiff
path: root/src/linkgraph/linkgraphjob.cpp
diff options
context:
space:
mode:
authorJonathan G Rennison <j.g.rennison@gmail.com>2020-12-24 23:36:36 +0000
committerGitHub <noreply@github.com>2020-12-25 00:36:36 +0100
commit94d629d79bcd623a5c77daa3db742cd8fd43d7b4 (patch)
tree25691cf3b5a2babd913b350275e8753b6b053ce4 /src/linkgraph/linkgraphjob.cpp
parentad47e3d9e6d07e5ee60a53ff53a8671058680da7 (diff)
downloadopenttd-94d629d79bcd623a5c77daa3db742cd8fd43d7b4.tar.xz
Change: [Linkgraph] Allow job threads to be aborted early when clearing schedule (#8416)
When link graph jobs are cleared due to abandoning the game or exiting, flag the job as aborted. The link graph job running in a separate thread checks the aborted flag periodically and terminates processing early if set. This reduces the delay at game abandon or exit if a long-running job would otherwise still be running.
Diffstat (limited to 'src/linkgraph/linkgraphjob.cpp')
-rw-r--r--src/linkgraph/linkgraphjob.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp
index c66ddeac7..e23c23b47 100644
--- a/src/linkgraph/linkgraphjob.cpp
+++ b/src/linkgraph/linkgraphjob.cpp
@@ -38,7 +38,8 @@ LinkGraphJob::LinkGraphJob(const LinkGraph &orig) :
link_graph(orig),
settings(_settings_game.linkgraph),
join_date(_date + _settings_game.linkgraph.recalc_time),
- job_completed(false)
+ job_completed(false),
+ job_aborted(false)
{
}
@@ -92,6 +93,11 @@ LinkGraphJob::~LinkGraphJob()
* Accessing other pools may be invalid. */
if (CleaningPool()) return;
+ /* If the job has been aborted, the job state is invalid.
+ * This should never be reached, as once the job has been marked as aborted
+ * the only valid job operation is to clear the LinkGraphJob pool. */
+ assert(!this->IsJobAborted());
+
/* Link graph has been merged into another one. */
if (!LinkGraph::IsValidID(this->link_graph.index)) return;