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
This commit is contained in:
Ignacio Casal Quinteiro 2022-05-13 16:43:38 +02:00 committed by Philip Withnall
parent f48e0a91a5
commit 7b140e1909

View File

@ -1257,7 +1257,6 @@ g_task_return (GTask *task,
GTaskReturnType type) GTaskReturnType type)
{ {
GSource *source; GSource *source;
gchar *source_name = NULL;
if (type != G_TASK_RETURN_FROM_THREAD) if (type != G_TASK_RETURN_FROM_THREAD)
task->ever_returned = TRUE; task->ever_returned = TRUE;
@ -1306,10 +1305,22 @@ g_task_return (GTask *task,
/* Otherwise, complete in the next iteration */ /* Otherwise, complete in the next iteration */
source = g_idle_source_new (); source = g_idle_source_new ();
source_name = g_strdup_printf ("[gio] %s complete_in_idle_cb",
(task->name != NULL) ? task->name : "(unnamed)"); /* 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_source_set_name (source, source_name);
g_free (source_name); g_free (source_name);
}
g_task_attach_source (task, source, complete_in_idle_cb); g_task_attach_source (task, source, complete_in_idle_cb);
g_source_unref (source); g_source_unref (source);
} }