Avoid shared mutable default for race qualTimes

DistributedRaceAI.__init__ defaulted qualTimes=[] and then did self.qualTimes.append(...), mutating the single list object that the default binds once at definition time. Every race created without an explicit qualTimes (e.g. from a race pad, where RaceManagerAI.createRace also defaulted qualTimes=[]) shared and grew that same list, leaking qualifying times across unrelated races for the life of the AI process.

Switched both defaults to None and build a fresh list in DistributedRaceAI when none is passed.
This commit is contained in:
Nicolas Sanchez 2026-05-29 20:23:40 -05:00
parent a5ecbb8b1e
commit 993fc85575
2 changed files with 3 additions and 3 deletions

View File

@ -11,7 +11,7 @@ from direct.distributed.ClockDelta import *
class DistributedRaceAI(DistributedObjectAI.DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedRaceAI')
def __init__(self, air, trackId, zoneId, avIds, laps, raceType, racerFinishedFunc, raceDoneFunc, circuitLoop, circuitPoints, circuitTimes, qualTimes=[], circuitTimeList={}, circuitTotalBonusTickets={}):
def __init__(self, air, trackId, zoneId, avIds, laps, raceType, racerFinishedFunc, raceDoneFunc, circuitLoop, circuitPoints, circuitTimes, qualTimes=None, circuitTimeList={}, circuitTotalBonusTickets={}):
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
self.trackId = trackId
self.direction = self.trackId % 2
@ -44,7 +44,7 @@ class DistributedRaceAI(DistributedObjectAI.DistributedObjectAI):
self.gagList = [
0] * len(RaceGlobals.TrackDict[trackId][4])
self.circuitLoop = circuitLoop
self.qualTimes = qualTimes
self.qualTimes = qualTimes if qualTimes is not None else []
self.circuitTimeList = circuitTimeList
self.qualTimes.append(RaceGlobals.TrackDict[trackId][1])
self.circuitTotalBonusTickets = circuitTotalBonusTickets

View File

@ -21,7 +21,7 @@ class RaceManagerAI(DirectObject.DirectObject):
def getDoId(self):
return 0
def createRace(self, trackId, raceType, laps, players, circuitLoop, circuitPoints, circuitTimes, qualTimes=[], circuitTimeList={}, circuitTotalBonusTickets={}):
def createRace(self, trackId, raceType, laps, players, circuitLoop, circuitPoints, circuitTimes, qualTimes=None, circuitTimeList={}, circuitTotalBonusTickets={}):
raceZone = self.air.allocateZone()
race = DistributedRaceAI.DistributedRaceAI(self.air, trackId, raceZone, players, laps, raceType, self.exitedRace, self.raceOver, circuitLoop, circuitPoints, circuitTimes, qualTimes, circuitTimeList, circuitTotalBonusTickets)
race.generateWithRequired(raceZone)