mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-28 02:20:04 +01:00
On Linux the sched_getattr syscall might be available at compile-time but not actually work at runtime (e.g. because an older kernel is running or valgrind is used). Instead of killing the process, return FALSE and handle this gracefully at runtime with some fallback code. Fixes https://gitlab.gnome.org/GNOME/glib/issues/2007
96 lines
3.1 KiB
C
96 lines
3.1 KiB
C
/* GLIB - Library of useful routines for C programming
|
|
*
|
|
* gthreadprivate.h - GLib internal thread system related declarations.
|
|
*
|
|
* Copyright (C) 2003 Sebastian Wilhelmi
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __G_THREADPRIVATE_H__
|
|
#define __G_THREADPRIVATE_H__
|
|
|
|
#include "config.h"
|
|
|
|
#include "deprecated/gthread.h"
|
|
|
|
typedef struct _GRealThread GRealThread;
|
|
struct _GRealThread
|
|
{
|
|
GThread thread;
|
|
|
|
gint ref_count;
|
|
gboolean ours;
|
|
gchar *name;
|
|
gpointer retval;
|
|
};
|
|
|
|
/* system thread implementation (gthread-posix.c, gthread-win32.c) */
|
|
|
|
/* Platform-specific scheduler settings for a thread */
|
|
typedef struct _GThreadSchedulerSettings GThreadSchedulerSettings;
|
|
|
|
/* TODO: Add the same for macOS and the BSDs */
|
|
#if defined(HAVE_SYS_SCHED_GETATTR)
|
|
/* This is for modern Linux */
|
|
struct _GThreadSchedulerSettings
|
|
{
|
|
struct sched_attr *attr;
|
|
};
|
|
|
|
#define HAVE_GTHREAD_SCHEDULER_SETTINGS 1
|
|
|
|
#elif defined(G_OS_WIN32)
|
|
struct _GThreadSchedulerSettings
|
|
{
|
|
gint thread_prio;
|
|
};
|
|
|
|
#define HAVE_GTHREAD_SCHEDULER_SETTINGS 1
|
|
#endif
|
|
|
|
void g_system_thread_wait (GRealThread *thread);
|
|
|
|
GRealThread *g_system_thread_new (GThreadFunc proxy,
|
|
gulong stack_size,
|
|
const GThreadSchedulerSettings *scheduler_settings,
|
|
const char *name,
|
|
GThreadFunc func,
|
|
gpointer data,
|
|
GError **error);
|
|
void g_system_thread_free (GRealThread *thread);
|
|
|
|
void g_system_thread_exit (void);
|
|
void g_system_thread_set_name (const gchar *name);
|
|
|
|
gboolean g_system_thread_get_scheduler_settings (GThreadSchedulerSettings *scheduler_settings);
|
|
|
|
/* gthread.c */
|
|
GThread *g_thread_new_internal (const gchar *name,
|
|
GThreadFunc proxy,
|
|
GThreadFunc func,
|
|
gpointer data,
|
|
gsize stack_size,
|
|
const GThreadSchedulerSettings *scheduler_settings,
|
|
GError **error);
|
|
|
|
gboolean g_thread_get_scheduler_settings (GThreadSchedulerSettings *scheduler_settings);
|
|
|
|
gpointer g_thread_proxy (gpointer thread);
|
|
|
|
gpointer g_private_set_alloc0 (GPrivate *key,
|
|
gsize size);
|
|
|
|
#endif /* __G_THREADPRIVATE_H__ */
|