<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 22, 2017 at 3:31 PM, Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 22/11/2017 23:42, Sebastian Huber wrote:<br>
> +Global Construction<br>
> +-------------------<br>
> +<br>
> +The global construction is carried out by the first Classic API initialization<br>
> +task.  If no Classic API initialization task exists, then it is carried out by<br>
> +the first POSIX API initialization thread.  If no initialization task or thread<br>
> +exists, then no global construction is performed, see for example<br>
> +:ref:`Specify Idle Task Performs Application Initialization`.<br>
<br>
</span>What sort of context do the constructors run in?<br></blockquote><div><br></div><div>They run in the context of the first user thread that runs. This means that technically</div><div>it varies based on user initialization task/thread configuration.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What impact does the context have on the configuration of what ever context is<br>
being used, eg stack size, priority, ...?<br></blockquote><div><br></div><div>They use stack space. So they would have to be accounted for in the usage of</div><div>the thread they will run in. Which leads to the next issue... priority and which </div><div>init thread runs them is a bit challenging</div><div><br></div><div>I think if you constructed an example with like both_hello and gave the Classic API</div><div>initialization task a lower priority than the POSIX Initialization thread, that you would</div><div>see the constructors run from the POSIX Initialization thread since it would run</div><div>first. </div><div><br></div><div>isn't the rule that these are executed by the first thread to execute?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What services in RTEMS can be used from global constructors?<br></blockquote><div><br></div><div>Likely everything except services explicitly started like networking, mounted</div><div>filesystems, etc.</div><div><br></div><div>There is also the issue that these could perform blocking operations and that</div><div>could potentially lead to some weird situations. If you only have one initialization</div><div>task/thread, it would introduce a possibly unexpected delay in the time until</div><div>the application is really alive.</div><div><br></div><div>If the constructors create threads/tasks, there are scenarios where they could </div><div>execute before the entire set of constructors is completed. That could lead to</div><div>unfortunate situations.</div><div><br></div><div>All of this needs to be documented. My response is simply based on my </div><div>understanding of where in the initialization sequence these are executed</div><div>and what I think could occur.</div><div><br></div><div>--joel</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Chris<br>
</font></span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/<wbr>mailman/listinfo/devel</a><br>
</div></div></blockquote></div><br></div></div>