summaryrefslogtreecommitdiff
path: root/src/glibext/delayed.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-08-22 21:38:30 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-08-22 21:38:30 (GMT)
commit4fb2ac107092671fe27fc3ebf9fc86dff7c3ec19 (patch)
tree92cf5860302b4ba485c85fef3062f1179a978560 /src/glibext/delayed.c
parent0f73369ad9cd15cb17ae44aadfc035cb12778b93 (diff)
Reorganized the global variables for the work queue singleton.
Diffstat (limited to 'src/glibext/delayed.c')
-rw-r--r--src/glibext/delayed.c74
1 files changed, 15 insertions, 59 deletions
diff --git a/src/glibext/delayed.c b/src/glibext/delayed.c
index ddd84a0..6251766 100644
--- a/src/glibext/delayed.c
+++ b/src/glibext/delayed.c
@@ -31,6 +31,7 @@
#include "delayed-int.h"
+#include "../gui/core/global.h"
@@ -72,8 +73,6 @@ typedef struct _GWorkGroup
wgroup_id_t id; /* Identifiant de travaux menés*/
- GtkStatusStack *status; /* Barre de statut principale */
-
GDelayedWork *works; /* Tâches à mener à bien */
GMutex mutex; /* Verrou pour l'accès */
GCond cond; /* Réveil pour un traitement */
@@ -113,7 +112,7 @@ static void g_work_group_dispose(GWorkGroup *);
static void g_work_group_finalize(GWorkGroup *);
/* Crée un nouveau thread dédié à un type de travaux donné. */
-static GWorkGroup *g_work_group_new(wgroup_id_t, GtkStatusStack *);
+static GWorkGroup *g_work_group_new(wgroup_id_t);
/* Fournit l'identifiant associé à un groupe de travail. */
static wgroup_id_t g_work_group_get_id(const GWorkGroup *);
@@ -143,11 +142,9 @@ struct _GWorkQueue
{
GObject parent; /* A laisser en premier */
- GtkStatusStack *status; /* Barre de statut principale */
-
wgroup_id_t generator; /* Générateur d'identifiants */
- GWorkGroup **groups; /* Files de traitement */
+ GWorkGroup **groups; /* Files de traitement */
size_t groups_count; /* Nombre de files internes */
GMutex mutex; /* Verrou pour l'accès */
@@ -446,8 +443,6 @@ static void g_work_group_dispose(GWorkGroup *group)
for (i = 0; i < group->threads_count; i++)
g_thread_join(group->threads[i]);
- g_object_unref(group->status);
-
while (!dl_list_empty(group->works))
{
work = group->works;
@@ -490,8 +485,7 @@ static void g_work_group_finalize(GWorkGroup *group)
/******************************************************************************
* *
-* Paramètres : type = type dont seront marqués tous les travaux donnés. *
-* status = barre de statut à tenir informée. *
+* Paramètres : type = type dont seront marqués tous les travaux donnés. *
* *
* Description : Crée un nouveau thread dédié à un type de travaux donné. *
* *
@@ -501,7 +495,7 @@ static void g_work_group_finalize(GWorkGroup *group)
* *
******************************************************************************/
-static GWorkGroup *g_work_group_new(wgroup_id_t id, GtkStatusStack *status)
+static GWorkGroup *g_work_group_new(wgroup_id_t id)
{
GWorkGroup *result; /* Traiteur à retourner */
@@ -509,12 +503,6 @@ static GWorkGroup *g_work_group_new(wgroup_id_t id, GtkStatusStack *status)
result->id = id;
- if (status != NULL)
- {
- result->status = status;
- g_object_ref(status);
- }
-
return result;
}
@@ -582,6 +570,7 @@ static void g_work_group_schedule(GWorkGroup *group, GDelayedWork *work)
static void *g_work_group_process(GWorkGroup *group)
{
GDelayedWork *work; /* Traitement à mener */
+ GtkStatusStack *status; /* Zone d'info éventuelle */
while (1)
{
@@ -601,7 +590,8 @@ static void *g_work_group_process(GWorkGroup *group)
g_mutex_unlock(&group->mutex);
- g_delayed_work_process(work, group->status);
+ status = get_global_status();
+ g_delayed_work_process(work, status);
g_object_unref(G_OBJECT(work));
@@ -774,8 +764,6 @@ static void g_work_queue_dispose(GWorkQueue *queue)
{
size_t i; /* Boucle de parcours */
- g_object_unref(G_OBJECT(queue->status));
-
g_mutex_lock(&queue->mutex);
for (i = 0; i < queue->groups_count; i++)
@@ -814,53 +802,21 @@ static void g_work_queue_finalize(GWorkQueue *queue)
/******************************************************************************
* *
-* Paramètres : status = barre de statut à tenir informée. *
-* *
-* Description : Procède au chargement du gestionnaire d'analyse différées. *
-* *
-* Retour : true pour indiquer un chargement réussi, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool init_work_queue(GtkStatusStack *status)
-{
- GWorkQueue *queue; /* Singleton à mettre en place */
-
- queue = g_object_new(G_TYPE_WORK_QUEUE, NULL);
-
- queue->status = status;
-
- if (status != NULL)
- g_object_ref(G_OBJECT(queue->status));
-
- if (queue != NULL)
- _get_work_queue(queue);
-
- return (queue != NULL);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : queue = nouveau gestionnaire à mémoriser ou NULL. *
+* Paramètres : - *
* *
-* Description : Fournit le gestionnaire de traitements parallèles courant. *
+* Description : Créé un nouveau gestionnaire de tâches parallèles. *
* *
-* Retour : Gestionnaire de traitements parallèles courant. *
+* Retour : Gestionnaire de traitements mis en place. *
* *
* Remarques : - *
* *
******************************************************************************/
-GWorkQueue *_get_work_queue(GWorkQueue *queue)
+GWorkQueue *g_work_queue_new(void)
{
- static GWorkQueue *result = NULL; /* Singleton à retourner */
+ GWorkQueue *result; /* Instance à retourner */
- if (queue != NULL)
- result = queue;
+ result = g_object_new(G_TYPE_WORK_QUEUE, NULL);
return result;
@@ -900,7 +856,7 @@ static GWorkGroup *g_work_queue_ensure_group_exists(GWorkQueue *queue, wgroup_id
queue->groups = (GWorkGroup **)realloc(queue->groups,
queue->groups_count * sizeof(GWorkGroup *));
- result = g_work_group_new(id, queue->status);
+ result = g_work_group_new(id);
queue->groups[queue->groups_count - 1] = result;
}