diff options
Diffstat (limited to 'src/core')
-rwxr-xr-x | src/core/Makefile.am | 3 | ||||
-rw-r--r-- | src/core/core.c | 7 | ||||
-rw-r--r-- | src/core/queue.c | 115 | ||||
-rw-r--r-- | src/core/queue.h | 52 |
4 files changed, 173 insertions, 4 deletions
diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 6e3132d..7acadea 100755 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -9,7 +9,8 @@ libcore_la_SOURCES = \ global.h global.c \ logs.h logs.c \ params.h params.c \ - processors.h processors.c + processors.h processors.c \ + queue.h queue.c libcore_la_LDFLAGS = $(LIBGTK_LIBS) $(LIBXML_LIBS) diff --git a/src/core/core.c b/src/core/core.c index 1b6b033..5e3a4d0 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -39,6 +39,7 @@ #include "global.h" #include "params.h" #include "processors.h" +#include "queue.h" #include "../analysis/db/keymgn.h" #include "../common/io.h" #include "../common/xdg.h" @@ -63,7 +64,6 @@ bool load_all_basic_components(void) { static bool result = false; /* Bilan à retourner */ char *cfgdir; /* Répertoire de configuration */ - GWorkQueue *queue; /* Singleton pour tâches */ GContentExplorer *explorer; /* Explorateur de contenus */ GContentResolver *resolver; /* Résolveur de contenus */ @@ -96,8 +96,7 @@ bool load_all_basic_components(void) result &= g_generic_config_read(get_main_configuration()); - queue = g_work_queue_new(); - set_work_queue(queue); + result &= init_global_works(); explorer = g_content_explorer_new(); set_current_content_explorer(explorer); @@ -142,6 +141,8 @@ void unload_all_basic_components(void) unload_processors_definitions(); + exit_global_works(); + g_generic_config_write(get_main_configuration()); unload_main_config_parameters(); diff --git a/src/core/queue.c b/src/core/queue.c new file mode 100644 index 0000000..615e351 --- /dev/null +++ b/src/core/queue.c @@ -0,0 +1,115 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * queue.c - mise en place des mécanismes de traitements parallèles + * + * Copyright (C) 2018 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Chrysalide is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "queue.h" + + +#include <assert.h> + + +#include "global.h" + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Met en place les mécanismes de traitements parallèles. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool init_global_works(void) +{ + GWorkQueue *queue; /* Singleton pour tâches */ +#ifndef NDEBUG + wgroup_id_t expected; /* Identifiant gloabl attendu */ +#endif + + queue = g_work_queue_new(); + set_work_queue(queue); + +#ifndef NDEBUG + expected = g_work_queue_define_work_group(queue); + assert(expected == DEFAULT_WORK_GROUP); +#else + g_work_queue_define_work_group(queue); +#endif + + return true; + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Supprime les mécanismes de traitements parallèles. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void exit_global_works(void) +{ + GWorkQueue *queue; /* Singleton pour tâches */ + + queue = get_work_queue(); + + g_object_unref(G_OBJECT(queue)); + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Attend que toutes les tâches de tout groupe soient traitées. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void wait_for_all_global_works(void) +{ + GWorkQueue *queue; /* Singleton pour tâches */ + + static const wgroup_id_t group_ids[] = { + DEFAULT_WORK_GROUP + }; + + queue = get_work_queue(); + + g_work_queue_wait_for_all_completions(queue, group_ids, GLOBAL_WORK_GROUPS_COUNT); + +} diff --git a/src/core/queue.h b/src/core/queue.h new file mode 100644 index 0000000..1984fff --- /dev/null +++ b/src/core/queue.h @@ -0,0 +1,52 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * queue.h - prototypes pour la mise en place des mécanismes de traitements parallèles + * + * Copyright (C) 2018 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Chrysalide is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _CORE_QUEUE_H +#define _CORE_QUEUE_H + + +#include <stdbool.h> + + + +/** + * Groupes d'exécution principaux. + */ + +#define DEFAULT_WORK_GROUP 0 + +#define GLOBAL_WORK_GROUPS_COUNT 1 + + +/* Met en place les mécanismes de traitements parallèles. */ +bool init_global_works(void); + +/* Supprime les mécanismes de traitements parallèles. */ +void exit_global_works(void); + +/* Attend que toutes les tâches de tout groupe soient traitées. */ +void wait_for_all_global_works(void); + + + +#endif /* _CORE_QUEUE_H */ |