diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2024-08-25 17:04:01 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2024-08-25 17:04:01 (GMT) |
commit | ab705b2c7fedce89ff08b36195706b2a1d9e1c42 (patch) | |
tree | 9615c3e47e4897d1dc4920d26fdc8da7eb01ac82 /src | |
parent | a0532508524a37444d15b878c5e494cd348b0cae (diff) |
Mark 0 as a reserved work group identifier.
Diffstat (limited to 'src')
-rw-r--r-- | src/glibext/workgroup.h | 5 | ||||
-rw-r--r-- | src/glibext/workqueue.c | 7 |
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); |