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); }