Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • kazoo kazoo
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • TASTETASTE
  • kazookazoo
  • Issues
  • #3

Funtion initialization locked in loop

Commit 0cc92371 introduces function initialization bug when functions request interfaces mutually (e.g. Function1 request interface from Function2, and Function2 requests interface from Function1).

In these cases, function initialization is stuck looping, since the <function name>_initialized flag is updated after initialization is completed, on init_<function name>():

bool function1_initialized = false;
void init_function1(void)
{
   if (!function1_initialized) {
      // Call user code startup function
      function1_startup();
      // Iterate over all synchronous RIs, and call their parent's
      // init function. Multiple calls are prevented by the "init" guard. -> no longer guaranteed
      extern void init_function2(void);
      init_function2();
#ifdef __unix__
      puts ("[TASTE] Initialization completed for function Function1");
#endif
      function1_initialized = true;
   }
}
bool function2_initialized = false;
void init_function2(void)
{
   if (!function2_initialized) {
      // Call user code startup function
      function2_startup();
      // Iterate over all synchronous RIs, and call their parent's
      // init function. Multiple calls are prevented by the "init" guard.
      extern void init_function1(void); 
      init_function1(); 
#ifdef __unix__
      puts ("[TASTE] Initialization completed for function Function2");
#endif
      function2_initialized = true;
   }
}
Assignee
Assign to
Time tracking