mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 06:56:14 +01:00
Make thread names useful in a debugger
Associate the name with the system thread, so that debuggers can see it. This is currently only implemented for Linux, using prctl. https://bugzilla.gnome.org/show_bug.cgi?id=660635
This commit is contained in:
parent
0d1a92ca3d
commit
1909d2398a
@ -907,6 +907,7 @@ AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h]
|
|||||||
AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
|
AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
|
||||||
AC_CHECK_HEADERS([sys/uio.h sys/mkdev.h])
|
AC_CHECK_HEADERS([sys/uio.h sys/mkdev.h])
|
||||||
AC_CHECK_HEADERS([linux/magic.h])
|
AC_CHECK_HEADERS([linux/magic.h])
|
||||||
|
AC_CHECK_HEADERS([sys/prctl.h])
|
||||||
|
|
||||||
# check for structure fields
|
# check for structure fields
|
||||||
AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec])
|
AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec])
|
||||||
|
@ -63,7 +63,9 @@
|
|||||||
#ifdef HAVE_SCHED_H
|
#ifdef HAVE_SCHED_H
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_SYS_PRCTL_H
|
||||||
|
#include <sys/prctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_thread_abort (gint status,
|
g_thread_abort (gint status,
|
||||||
@ -1047,5 +1049,13 @@ g_system_thread_equal (gpointer thread1,
|
|||||||
return (pthread_equal (*(pthread_t*)thread1, *(pthread_t*)thread2) != 0);
|
return (pthread_equal (*(pthread_t*)thread1, *(pthread_t*)thread2) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
g_system_thread_set_name (const gchar *name)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_SYS_PRCTL_H
|
||||||
|
prctl (PR_SET_NAME, name, 0, 0, 0, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* {{{1 Epilogue */
|
/* {{{1 Epilogue */
|
||||||
/* vim:set foldmethod=marker: */
|
/* vim:set foldmethod=marker: */
|
||||||
|
@ -621,6 +621,12 @@ g_system_thread_equal (gpointer thread1,
|
|||||||
return ((GSystemThread*)thread1)->dummy_pointer == ((GSystemThread*)thread2)->dummy_pointer;
|
return ((GSystemThread*)thread1)->dummy_pointer == ((GSystemThread*)thread2)->dummy_pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
g_system_thread_set_name (const gchar *name)
|
||||||
|
{
|
||||||
|
/* FIXME: implement */
|
||||||
|
}
|
||||||
|
|
||||||
/* {{{1 SRWLock and CONDITION_VARIABLE emulation (for Windows XP) */
|
/* {{{1 SRWLock and CONDITION_VARIABLE emulation (for Windows XP) */
|
||||||
|
|
||||||
static CRITICAL_SECTION g_thread_xp_lock;
|
static CRITICAL_SECTION g_thread_xp_lock;
|
||||||
|
@ -1131,6 +1131,9 @@ g_thread_create_proxy (gpointer data)
|
|||||||
|
|
||||||
g_assert (data);
|
g_assert (data);
|
||||||
|
|
||||||
|
if (thread->name)
|
||||||
|
g_system_thread_set_name (thread->name);
|
||||||
|
|
||||||
/* This has to happen before G_LOCK, as that might call g_thread_self */
|
/* This has to happen before G_LOCK, as that might call g_thread_self */
|
||||||
g_private_set (&g_thread_specific_private, data);
|
g_private_set (&g_thread_specific_private, data);
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ G_GNUC_INTERNAL gboolean g_system_thread_equal (gpointer thread1,
|
|||||||
gpointer thread2);
|
gpointer thread2);
|
||||||
|
|
||||||
G_GNUC_INTERNAL void g_system_thread_exit (void);
|
G_GNUC_INTERNAL void g_system_thread_exit (void);
|
||||||
|
G_GNUC_INTERNAL void g_system_thread_set_name (const gchar *name);
|
||||||
|
|
||||||
G_GNUC_INTERNAL GSystemThread zero_thread;
|
G_GNUC_INTERNAL GSystemThread zero_thread;
|
||||||
G_GNUC_INTERNAL GMutex g_once_mutex;
|
G_GNUC_INTERNAL GMutex g_once_mutex;
|
||||||
|
Loading…
Reference in New Issue
Block a user