diff --git a/Moose Development/Moose/Core/ScheduleDispatcher.lua b/Moose Development/Moose/Core/ScheduleDispatcher.lua index 7f0102943..0d6fa6df5 100644 --- a/Moose Development/Moose/Core/ScheduleDispatcher.lua +++ b/Moose Development/Moose/Core/ScheduleDispatcher.lua @@ -246,11 +246,11 @@ function SCHEDULEDISPATCHER:AddSchedule( Scheduler, ScheduleFunction, ScheduleAr -- self:T3( { Repeat = CallID, CurrentTime, ScheduleTime, ScheduleArguments } ) return ScheduleTime -- returns the next time the function needs to be called. else - self:Stop( Scheduler, CallID ) + self:_Reclaim( Scheduler, CallID ) end else - self:Stop( Scheduler, CallID ) + self:_Reclaim( Scheduler, CallID ) end else self:I( "<<<>" .. Name .. ":" .. Line .. " (" .. Source .. ")" ) @@ -375,3 +375,13 @@ function SCHEDULEDISPATCHER:NoTrace( Scheduler ) Scheduler.ShowTrace = false end +--- Helper for memory cleanup for self stopping schedulers +-- @param #SCHEDULEDISPATCHER self +-- @param Core.Scheduler#SCHEDULER Scheduler Scheduler object. +-- @param #string CallID (Optional) Scheduler Call ID. +function SCHEDULEDISPATCHER:_Reclaim( Scheduler, CallID ) + self:Stop( Scheduler, CallID ) -- remove DCS timer, nil ScheduleID + if self.Schedule[Scheduler] then self.Schedule[Scheduler][CallID] = nil end + self.ObjectSchedulers[CallID] = nil + self.PersistentSchedulers[CallID] = nil +end