summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2024-08-25 17:04:01 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2024-08-25 17:04:01 (GMT)
commitab705b2c7fedce89ff08b36195706b2a1d9e1c42 (patch)
tree9615c3e47e4897d1dc4920d26fdc8da7eb01ac82
parenta0532508524a37444d15b878c5e494cd348b0cae (diff)
Mark 0 as a reserved work group identifier.
-rw-r--r--src/glibext/workgroup.h5
-rw-r--r--src/glibext/workqueue.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/src/glibext/workgroup.h b/src/glibext/workgroup.h
index 1a003c8..f40155e 100644
--- a/src/glibext/workgroup.h
+++ b/src/glibext/workgroup.h
@@ -47,6 +47,11 @@ DECLARE_GTYPE(GWorkGroup, g_work_group, G, WORK_GROUP);
*/
typedef uint64_t wgroup_id_t;
+/**
+ * Marque de non initialisation.
+ */
+#define INVALID_GROUP_ID 0
+
/* Crée un nouveau thread dédié à un type de travaux donné. */
GWorkGroup *g_work_group_new(wgroup_id_t, guint);
diff --git a/src/glibext/workqueue.c b/src/glibext/workqueue.c
index ad6ede6..fe7f1bb 100644
--- a/src/glibext/workqueue.c
+++ b/src/glibext/workqueue.c
@@ -247,8 +247,13 @@ wgroup_id_t g_work_queue_define_group(GWorkQueue *queue, guint count)
do
{
- result = queue->generator++;
+ result = ++queue->generator;
+
+ if (result == INVALID_GROUP_ID)
+ continue;
+
created = g_work_queue_ensure_group_exists(queue, result, count);
+
}
while (!created);