mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 07:26:15 +01:00
gthread: Only print scheduler setting warnings once
If one thread pool thread fails to set its scheduler settings, it’s likely that all the rest of them will fail for the same reason. Avoid printing duplicate critical warnings in that case. Signed-off-by: Philip Withnall <withnall@endlessm.com> Fixes: #2191
This commit is contained in:
parent
bdcf193c2e
commit
c8840ff9a8
@ -1235,6 +1235,7 @@ static void *
|
||||
linux_pthread_proxy (void *data)
|
||||
{
|
||||
GThreadPosix *thread = data;
|
||||
static gboolean printed_scheduler_warning = FALSE; /* (atomic) */
|
||||
|
||||
/* Set scheduler settings first if requested */
|
||||
if (thread->scheduler_settings)
|
||||
@ -1247,8 +1248,11 @@ linux_pthread_proxy (void *data)
|
||||
tid = (pid_t) syscall (SYS_gettid);
|
||||
res = syscall (SYS_sched_setattr, tid, thread->scheduler_settings->attr, flags);
|
||||
errsv = errno;
|
||||
if (res == -1)
|
||||
if (res == -1 && g_atomic_int_compare_and_exchange (&printed_scheduler_warning, FALSE, TRUE))
|
||||
g_critical ("Failed to set scheduler settings: %s", g_strerror (errsv));
|
||||
else if (res == -1)
|
||||
g_debug ("Failed to set scheduler settings: %s", g_strerror (errsv));
|
||||
printed_scheduler_warning = TRUE;
|
||||
}
|
||||
|
||||
return thread->proxy (data);
|
||||
|
Loading…
Reference in New Issue
Block a user