mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-16 09:50:25 +00:00
pass the thread name to the OS if possible
use prctl to pass the thread name to the OS, if possible
This commit is contained in:
parent
fb77afbe75
commit
68608de203
@ -1230,7 +1230,7 @@ AC_CHECK_HEADERS_ONCE(
|
||||
linux/version.h sys/systeminfo.h
|
||||
stdio_ext.h fcntl.h coff.h pty.h
|
||||
sys/vlimit.h sys/resource.h
|
||||
sys/utsname.h pwd.h utmp.h dirent.h util.h)
|
||||
sys/utsname.h pwd.h utmp.h dirent.h util.h sys/prctl.h)
|
||||
|
||||
AC_MSG_CHECKING(if personality LINUX32 can be set)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/personality.h>]], [[personality (PER_LINUX32)]])],
|
||||
@ -2731,7 +2731,7 @@ gai_strerror mkstemp getline getdelim fsync sync \
|
||||
difftime posix_memalign \
|
||||
getpwent endpwent getgrent endgrent \
|
||||
touchlock \
|
||||
cfmakeraw cfsetspeed copysign __executable_start)
|
||||
cfmakeraw cfsetspeed copysign __executable_start prctl)
|
||||
|
||||
dnl getwd appears to be buggy on SVR4.2, so we don't use it.
|
||||
if test $opsys = unixware; then
|
||||
|
@ -24,6 +24,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sched.h>
|
||||
|
||||
#ifdef HAVE_SYS_PRCTL_H
|
||||
#include <sys/prctl.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
sys_mutex_init (sys_mutex_t *mutex)
|
||||
{
|
||||
@ -91,8 +95,8 @@ sys_thread_equal (sys_thread_t one, sys_thread_t two)
|
||||
}
|
||||
|
||||
int
|
||||
sys_thread_create (sys_thread_t *thread_ptr, thread_creation_function *func,
|
||||
void *arg)
|
||||
sys_thread_create (sys_thread_t *thread_ptr, const char *name,
|
||||
thread_creation_function *func, void *arg)
|
||||
{
|
||||
pthread_attr_t attr;
|
||||
int result = 0;
|
||||
@ -101,7 +105,13 @@ sys_thread_create (sys_thread_t *thread_ptr, thread_creation_function *func,
|
||||
return 0;
|
||||
|
||||
if (!pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED))
|
||||
result = pthread_create (thread_ptr, &attr, func, arg) == 0;
|
||||
{
|
||||
result = pthread_create (thread_ptr, &attr, func, arg) == 0;
|
||||
#if defined (HAVE_SYS_PRCTL_H) && defined (HAVE_PRCTL) && defined (PR_SET_NAME)
|
||||
if (result && name != NULL)
|
||||
prctl (PR_SET_NAME, name);
|
||||
#endif
|
||||
}
|
||||
|
||||
pthread_attr_destroy (&attr);
|
||||
|
||||
|
@ -54,7 +54,8 @@ extern void sys_cond_destroy (sys_cond_t *);
|
||||
extern sys_thread_t sys_thread_self (void);
|
||||
extern int sys_thread_equal (sys_thread_t, sys_thread_t);
|
||||
|
||||
extern int sys_thread_create (sys_thread_t *, thread_creation_function *,
|
||||
extern int sys_thread_create (sys_thread_t *, const char *,
|
||||
thread_creation_function *,
|
||||
void *);
|
||||
|
||||
extern void sys_thread_yield (void);
|
||||
|
@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
#include "character.h"
|
||||
#include "buffer.h"
|
||||
#include "process.h"
|
||||
#include "coding.h"
|
||||
|
||||
static struct thread_state primary_thread;
|
||||
|
||||
@ -682,6 +683,7 @@ If NAME is given, it names the new thread. */)
|
||||
sys_thread_t thr;
|
||||
struct thread_state *new_thread;
|
||||
Lisp_Object result;
|
||||
const char *c_name = NULL;
|
||||
|
||||
/* Can't start a thread in temacs. */
|
||||
if (!initialized)
|
||||
@ -716,7 +718,10 @@ If NAME is given, it names the new thread. */)
|
||||
new_thread->next_thread = all_threads;
|
||||
all_threads = new_thread;
|
||||
|
||||
if (! sys_thread_create (&thr, run_thread, new_thread))
|
||||
if (!NILP (name))
|
||||
c_name = SSDATA (ENCODE_UTF_8 (name));
|
||||
|
||||
if (! sys_thread_create (&thr, c_name, run_thread, new_thread))
|
||||
{
|
||||
/* Restore the previous situation. */
|
||||
all_threads = all_threads->next_thread;
|
||||
|
Loading…
Reference in New Issue
Block a user