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:
parent
a5ecbb8b1e
commit
993fc85575
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue