Skip to content

Lazy initialization of ApplicationContext #24

@stoffera

Description

@stoffera

This is an issue that was raised in #20

Problem

User objects defined in C++ global space might cause the system to crash, by dereferencing null pointers.

Background

The global object ApplicationContext is defined in C++ global space. This means it is initialized by the language runtime. Especially Arduino SDK needs to declare user interface objects in global space, that depends on an initialized ApplicationContext. However, C++ (or C) runtime does not guarantee any order of of object initialization.

Solution

Currently the singleton ApplicationContext is obtained by the static member variable of the context interface:

mono::IApplicationContext::Instance

Here Instance is the stat9c member of the interface. The member is null until the global app. context is constructed by the C++ runtime.

We should reference the app. context by using a function - not a member variable. Instead this function will create and return, or later just return the global ApplicationContext. Then, to get a reference to the context you could do this:

mono::IApplicationContext::get()

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions