main: Initialize dialplan providing core components prior to module pre-load

It is possible to pre-load pbx_config. As a result, pbx_config - which will
load and parse the dialplan - will attempt to use various dialplan components,
such as device state providers and presence state providers, prior to them
being initialized by the core. This would lead to a crash, as the components
had not created their Stasis cache entries.

This patch moves a number of core component initializations before the module
pre-load. This guarantees that if someone does pre-load pbx_config - or other
pbx modules - that the Stasis caches for the various core components are
created.

(closes issue ASTERISK-23320)
Reported by: xrobau

(closes issue ASTERISK-23265)
Reported by: Andrew Nagy
Tested by: Andrew Nagy, Rusty Newton
........

Merged revisions 408855 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@408859 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Matthew Jordan
2014-02-22 23:31:10 +00:00
parent 11ac08296b
commit 31707b1d69

View File

@@ -4426,6 +4426,36 @@ int main(int argc, char *argv[])
exit(1);
}
if (ast_features_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_pickup_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_bridging_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_parking_stasis_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_device_state_engine_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_presence_state_engine_init()) {
printf("%s", term_quit());
exit(1);
}
if ((moduleresult = load_modules(1))) { /* Load modules, pre-load only */
printf("%s", term_quit());
exit(moduleresult == -2 ? 2 : 1);
@@ -4453,41 +4483,11 @@ int main(int argc, char *argv[])
exit(1);
}
if (ast_features_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_pickup_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_bridging_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_parking_stasis_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_cdr_engine_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_device_state_engine_init()) {
printf("%s", term_quit());
exit(1);
}
if (ast_presence_state_engine_init()) {
printf("%s", term_quit());
exit(1);
}
ast_dsp_init();
ast_udptl_init();