diff options
-rw-r--r-- | plugins/pychrysalide/pychrysa.c | 4 | ||||
-rw-r--r-- | src/core/core.c | 64 | ||||
-rw-r--r-- | src/core/core.h | 4 | ||||
-rw-r--r-- | src/hub.c | 6 | ||||
-rw-r--r-- | src/main.c | 10 |
5 files changed, 51 insertions, 37 deletions
diff --git a/plugins/pychrysalide/pychrysa.c b/plugins/pychrysalide/pychrysa.c index 8e6cfbc..d1958ee 100644 --- a/plugins/pychrysalide/pychrysa.c +++ b/plugins/pychrysalide/pychrysa.c @@ -360,7 +360,7 @@ static void PyExit_pychrysalide(void) exit_all_plugins(); - unload_all_basic_components(); + unload_all_core_components(true); #ifdef TRACK_GOBJECT_LEAKS dump_remaining_gtypes(); @@ -498,7 +498,7 @@ PyMODINIT_FUNC PyInit_pychrysalide(void) if (!set_version_for_gtk_namespace("3.0")) goto exit; - if (!load_all_basic_components()) + if (!load_all_core_components(true)) { PyErr_SetString(PyExc_SystemError, "unable to load all basic components."); goto exit; diff --git a/src/core/core.c b/src/core/core.c index 7be81b2..a72122c 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -49,7 +49,7 @@ /****************************************************************************** * * -* Paramètres : - * +* Paramètres : cs = précise si l'appel est réalisé du côté client. * * * * Description : Charge les éléments de base du programme. * * * @@ -59,7 +59,7 @@ * * ******************************************************************************/ -bool load_all_basic_components(void) +bool load_all_core_components(bool cs) { static bool result = false; /* Bilan à retourner */ char *cfgdir; /* Répertoire de configuration */ @@ -79,33 +79,37 @@ bool load_all_basic_components(void) result &= (ensure_path_exists(cfgdir) == 0); free(cfgdir); - g_boxed_type_register_static("vmpa_t", - (GBoxedCopyFunc)dup_vmpa, - (GBoxedFreeFunc)delete_vmpa); - ERR_load_crypto_strings(); SSL_load_error_strings(); SSL_library_init(); - result &= init_chrysalide_dynamic_types(); + if (result) result = init_global_works(); + + if (result) result = load_hard_coded_collection_definitions(); + + if (cs) + { + g_boxed_type_register_static("vmpa_t", + (GBoxedCopyFunc)dup_vmpa, + (GBoxedFreeFunc)delete_vmpa); - result &= load_main_config_parameters(); + if (result) result = load_main_config_parameters(); - result &= g_generic_config_read(get_main_configuration()); + if (result) result = g_generic_config_read(get_main_configuration()); - result &= init_global_works(); + explorer = g_content_explorer_new(); + set_current_content_explorer(explorer); - explorer = g_content_explorer_new(); - set_current_content_explorer(explorer); + resolver = g_content_resolver_new(); + set_current_content_resolver(resolver); - resolver = g_content_resolver_new(); - set_current_content_resolver(resolver); + if (result) result = init_segment_content_hash_table(); - result &= init_segment_content_hash_table(); + register_arch_gtypes(); - register_arch_gtypes(); + if (result) result = init_chrysalide_dynamic_types(); - result &= load_hard_coded_collection_definitions(); + } } @@ -116,7 +120,7 @@ bool load_all_basic_components(void) /****************************************************************************** * * -* Paramètres : - * +* Paramètres : cs = précise si l'appel est réalisé du côté client. * * * * Description : Décharge les éléments de base du programme. * * * @@ -126,25 +130,29 @@ bool load_all_basic_components(void) * * ******************************************************************************/ -void unload_all_basic_components(void) +void unload_all_core_components(bool cs) { - unload_collection_definitions(); + if (cs) + { + exit_chrysalide_dynamic_types(); - unload_demanglers_definitions(); + unload_demanglers_definitions(); - unload_processors_definitions(); + unload_processors_definitions(); - set_current_content_explorer(NULL); + set_current_content_resolver(NULL); - set_current_content_resolver(NULL); + set_current_content_explorer(NULL); - exit_global_works(); + g_generic_config_write(get_main_configuration()); - g_generic_config_write(get_main_configuration()); + unload_main_config_parameters(); - unload_main_config_parameters(); + } - exit_chrysalide_dynamic_types(); + unload_collection_definitions(); + + exit_global_works(); ERR_free_strings(); diff --git a/src/core/core.h b/src/core/core.h index 627531c..0221f56 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -30,10 +30,10 @@ /* Charge les éléments de base du programme. */ -bool load_all_basic_components(void); +bool load_all_core_components(bool); /* Décharge les éléments de base du programme. */ -void unload_all_basic_components(void); +void unload_all_core_components(bool); @@ -41,6 +41,7 @@ #include "gleak.h" #include "analysis/db/auth.h" #include "analysis/db/server.h" +#include "core/core.h" #include "core/global.h" #include "core/logs.h" #include "core/paths.h" @@ -360,6 +361,9 @@ int main(int argc, char **argv) set_log_verbosity(verbosity); + if (!load_all_core_components(false)) + goto done; + /* Traitement des commandes */ switch (command) @@ -387,6 +391,8 @@ int main(int argc, char **argv) } + unload_all_core_components(false); + #ifdef TRACK_GOBJECT_LEAKS remember_gtypes_for_leaks(); #endif @@ -303,8 +303,8 @@ int main(int argc, char **argv) set_log_verbosity(verbosity); - if (!load_all_basic_components()) - return EXIT_FAILURE; + if (!load_all_core_components(true)) + goto done; /* Création de l'interface */ @@ -449,14 +449,14 @@ int main(int argc, char **argv) failed_to_load_editor: - unload_all_basic_components(); - - done: + unload_all_core_components(true); #ifdef TRACK_GOBJECT_LEAKS dump_remaining_gtypes(); #endif + done: + return result; } |