Changeset - r28302:b4068fa1355c
[Not reviewed]
master
0 4 0
SamuXarick - 12 months ago 2023-12-17 21:50:53
43006711+SamuXarick@users.noreply.github.com
Fix #10452: Don't let AyStar max_search_nodes unattended when initializing (#11544)

Add a constant with the default value of 10000 and have the pathfinding settings refer to it.

Add a preventative method to AyStar when it's initializing, to limit the number of max_search_nodes if left unattended.
4 files changed with 8 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/pathfinder/npf/aystar.cpp
Show inline comments
 
@@ -298,7 +298,10 @@ void AyStar::Init(Hash_HashProc hash, ui
 

	
 
	/* Set up our sorting queue
 
	 *  BinaryHeap allocates a block of 1024 nodes
 
	 *  When that one gets full it reserves another one, till this number
 
	 *  That is why it can stay this high */
 
	this->openlist_queue.Init(102400);
 

	
 
	/* Set a reasonable default limit */
 
	this->max_search_nodes = AYSTAR_DEF_MAX_SEARCH_NODES;
 
}
src/pathfinder/npf/aystar.h
Show inline comments
 
@@ -17,12 +17,14 @@
 
#define AYSTAR_H
 

	
 
#include "queue.h"
 
#include "../../tile_type.h"
 
#include "../../track_type.h"
 

	
 
static const int AYSTAR_DEF_MAX_SEARCH_NODES = 10000; ///< Reference limit for #AyStar::max_search_nodes
 

	
 
/** Return status of #AyStar methods. */
 
enum AystarStatus {
 
	AYSTAR_FOUND_END_NODE, ///< An end node was found.
 
	AYSTAR_EMPTY_OPENLIST, ///< All items are tested, and no path has been found.
 
	AYSTAR_STILL_BUSY,     ///< Some checking was done, but no path found yet, and there are still items left to try.
 
	AYSTAR_NO_PATH,        ///< No path to the goal was found.
src/pathfinder/pathfinder_type.h
Show inline comments
 
@@ -8,12 +8,13 @@
 
/** @file pathfinder_type.h General types related to pathfinders. */
 

	
 
#ifndef PATHFINDER_TYPE_H
 
#define PATHFINDER_TYPE_H
 

	
 
#include "../tile_type.h"
 
#include "npf/aystar.h"
 

	
 
/** Length (penalty) of one tile with NPF */
 
static const int NPF_TILE_LENGTH = 100;
 

	
 
/**
 
 * This penalty is the equivalent of "infinite", which means that paths that
src/table/settings/pathfinding_settings.ini
Show inline comments
 
@@ -165,13 +165,13 @@ min      = 1
 
max      = 255
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
var      = pf.npf.npf_max_search_nodes
 
type     = SLE_UINT
 
def      = 10000
 
def      = AYSTAR_DEF_MAX_SEARCH_NODES
 
min      = 500
 
max      = 100000
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
var      = pf.npf.npf_rail_firstred_penalty
 
@@ -322,13 +322,13 @@ def      = false
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
var      = pf.yapf.max_search_nodes
 
type     = SLE_UINT
 
from     = SLV_28
 
def      = 10000
 
def      = AYSTAR_DEF_MAX_SEARCH_NODES
 
min      = 500
 
max      = 1000000
 
cat      = SC_EXPERT
 

	
 
[SDT_BOOL]
 
var      = pf.yapf.rail_firstred_twoway_eol
0 comments (0 inline, 0 general)