Fix memory leak from object pools.

This commit is contained in:
2023-04-21 12:18:29 +08:00
parent c39a02a1c2
commit 2784544884
4 changed files with 27 additions and 10 deletions

View File

@@ -321,10 +321,10 @@ namespace Cryville.Crtr.Event {
public void Discard(StampedEvent ev) {
Handler.Discard(this, ev);
if (ev is StampedEvent.RelativeMotion) {
relmEvPool.Return((StampedEvent.RelativeMotion)ev);
ReturnRelativeMotionEvent((StampedEvent.RelativeMotion)ev);
}
else if (ev.Origin is StampedEvent.RelativeMotion) {
erelmEvPool.Return((StampedEvent.Temporary)ev);
ReturnEndRelativeMotionEvent((StampedEvent.Temporary)ev);
}
}
@@ -353,7 +353,7 @@ namespace Cryville.Crtr.Event {
if (ev.Duration == 0) {
PlayingMotions.Remove(ev);
_rmvpa.Return(mv);
relmEvPool.Return(tev);
ReturnRelativeMotionEvent(tev);
}
}
else if (ev.Unstamped is EventContainer) {
@@ -372,8 +372,8 @@ namespace Cryville.Crtr.Event {
var mv = PlayingMotions[oev];
if (mv.CloneTypeFlag == CloneType) _rmvpa.Return(mv);
PlayingMotions.Remove(oev);
erelmEvPool.Return((StampedEvent.Temporary)ev);
relmEvPool.Return((StampedEvent.RelativeMotion)oev);
ReturnEndRelativeMotionEvent((StampedEvent.Temporary)ev);
ReturnRelativeMotionEvent((StampedEvent.RelativeMotion)oev);
}
else {
var nev = oev.Unstamped;
@@ -521,7 +521,6 @@ namespace Cryville.Crtr.Event {
ev.Container = Container;
ev.Name = m.Key;
ev.Node = node.Value;
ev.ReleaseEvent = null;
bus.PushTempEvent(ev);
if (node.Value.EndTime.Value > node.Value.Time.Value) {
var eev = erelmEvPool.Rent();
@@ -534,6 +533,17 @@ namespace Cryville.Crtr.Event {
}
}
}
void ReturnRelativeMotionEvent(StampedEvent.RelativeMotion ev) {
ev.Container = null;
ev.Node = null;
ev.ReleaseEvent = null;
relmEvPool.Return(ev);
}
void ReturnEndRelativeMotionEvent(StampedEvent.Temporary ev) {
ev.Container = null;
ev.Origin = null;
erelmEvPool.Return(ev);
}
#endregion
}
}