Skip to content

[core] Indirect leak in `Scheduler` class

Required prerequisites

  • Make sure you've read the documentation. Your issue may be addressed there.
  • Search the issue tracker and discussions to verify that this hasn't already been reported. +1 or comment there if it has.

What commit version of aidge do you use

  • aidge_core: 0.3.0

Problem description

In the context of solving memory leaks in Aidge aidge#195, a source of indirect leak in the form of a circular reference of shared_ptr was found in the Scheduler class.

The Scheduler uses a structure called the StaticSchedulingElement storing a Node and two lists of shared_ptr to other StaticSchedulingElement than should be run before (laterThan) and after (earlierThan) it. Sequential Nodes induce circular references between StaticSchedulingElement.

Reproducible example code

Simply create a GraphView with at least two nodes connected to each other and generate a scheduling for this graph. You just created an indirect leak.

Solution

These lists can be changed to lists of raw pointers as each StaticSchedulingElement is globaly stored in the Scheduler::mStaticScheduler attribute and should not outlive there storage in it. So clean deletion of StaticSchedulingElement raw pointers can simply be handled.