From f38d74b2339ff8184325517d09104a744fb7f3cd Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Fri, 13 May 2022 16:43:38 +0200 Subject: [PATCH] gtask: use g_strconcat() in g_task_return() only if needed If the task name is NULL there is no need to allocate the string since this can be expensive if called very often --- gio/gtask.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/gio/gtask.c b/gio/gtask.c index 80c0863ff..365f200ad 100644 --- a/gio/gtask.c +++ b/gio/gtask.c @@ -1257,7 +1257,6 @@ g_task_return (GTask *task, GTaskReturnType type) { GSource *source; - gchar *source_name = NULL; if (type != G_TASK_RETURN_FROM_THREAD) task->ever_returned = TRUE; @@ -1306,10 +1305,22 @@ g_task_return (GTask *task, /* Otherwise, complete in the next iteration */ source = g_idle_source_new (); - source_name = g_strdup_printf ("[gio] %s complete_in_idle_cb", - (task->name != NULL) ? task->name : "(unnamed)"); - g_source_set_name (source, source_name); - g_free (source_name); + + /* Note: in case the task name is NULL we set it as a const string instead + * of going through the concat path which is more expensive and may show in the + * profiler if g_task_return is called very often + */ + if (task->name == NULL) + g_source_set_static_name (source, "[gio] (unnamed) complete_in_idle_cb"); + else + { + gchar *source_name; + + source_name = g_strconcat ("[gio] ", task->name, " complete_in_idle_cb", NULL); + g_source_set_name (source, source_name); + g_free (source_name); + } + g_task_attach_source (task, source, complete_in_idle_cb); g_source_unref (source); }