|
|
|
|
@ -27,6 +27,10 @@
|
|
|
|
|
#ifndef __THREADS_H__
|
|
|
|
|
#define __THREADS_H__
|
|
|
|
|
|
|
|
|
|
#ifndef THREAD_NAME_LEN
|
|
|
|
|
#define THREAD_NAME_LEN 16
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if defined(TLS_C11)
|
|
|
|
|
#define thread_local _Thread_local
|
|
|
|
|
#elif defined(TLS_GNU)
|
|
|
|
|
@ -83,7 +87,6 @@ enum {
|
|
|
|
|
#endif
|
|
|
|
|
#if HAVE_SYS_PRCTL_H
|
|
|
|
|
#include <sys/prctl.h>
|
|
|
|
|
#define THREAD_NAME_LEN 16
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
|
@ -262,28 +265,31 @@ enum {
|
|
|
|
|
})
|
|
|
|
|
#endif /* OS FREEBSD */
|
|
|
|
|
|
|
|
|
|
extern thread_local char t_thread_name[THREAD_NAME_LEN + 1];
|
|
|
|
|
/*
|
|
|
|
|
* OS specific macro's for setting the thread name. "top" can display
|
|
|
|
|
* this name.
|
|
|
|
|
*/
|
|
|
|
|
#if defined OS_FREEBSD /* FreeBSD */
|
|
|
|
|
/** \todo Add implementation for FreeBSD */
|
|
|
|
|
#define SCSetThreadName(n) ({ \
|
|
|
|
|
char tname[16] = ""; \
|
|
|
|
|
if (strlen(n) > 16) \
|
|
|
|
|
SCLogDebug("Thread name is too long, truncating it..."); \
|
|
|
|
|
strlcpy(tname, n, 16); \
|
|
|
|
|
pthread_set_name_np(pthread_self(), tname); \
|
|
|
|
|
})
|
|
|
|
|
#define SCSetThreadName(n) \
|
|
|
|
|
({ \
|
|
|
|
|
char tname[THREAD_NAME_LEN] = ""; \
|
|
|
|
|
if (strlen(n) > THREAD_NAME_LEN) \
|
|
|
|
|
SCLogDebug("Thread name is too long, truncating it..."); \
|
|
|
|
|
strlcpy(tname, n, THREAD_NAME_LEN); \
|
|
|
|
|
strlcpy(t_thread_name, n, sizeof(t_thread_name)); \
|
|
|
|
|
pthread_set_name_np(pthread_self(), tname); \
|
|
|
|
|
})
|
|
|
|
|
#elif defined __OpenBSD__ /* OpenBSD */
|
|
|
|
|
/** \todo Add implementation for OpenBSD */
|
|
|
|
|
#define SCSetThreadName(n) (0)
|
|
|
|
|
#define SCSetThreadName(n) ({ strlcpy(t_thread_name, n, sizeof(t_thread_name)); })
|
|
|
|
|
#elif defined OS_WIN32 /* Windows */
|
|
|
|
|
/** \todo Add implementation for Windows */
|
|
|
|
|
#define SCSetThreadName(n) (0)
|
|
|
|
|
#define SCSetThreadName(n) ({ strlcpy(t_thread_name, n, sizeof(t_thread_name)); })
|
|
|
|
|
#elif defined OS_DARWIN /* Mac OS X */
|
|
|
|
|
/** \todo Add implementation for MacOS */
|
|
|
|
|
#define SCSetThreadName(n) (0)
|
|
|
|
|
#define SCSetThreadName(n) ({ strlcpy(t_thread_name, n, sizeof(t_thread_name)); })
|
|
|
|
|
#elif defined PR_SET_NAME /* PR_SET_NAME */
|
|
|
|
|
/**
|
|
|
|
|
* \brief Set the threads name
|
|
|
|
|
@ -294,11 +300,14 @@ enum {
|
|
|
|
|
if (strlen(n) > THREAD_NAME_LEN) \
|
|
|
|
|
SCLogDebug("Thread name is too long, truncating it..."); \
|
|
|
|
|
strlcpy(tname, n, THREAD_NAME_LEN); \
|
|
|
|
|
strlcpy(t_thread_name, n, sizeof(t_thread_name)); \
|
|
|
|
|
if (prctl(PR_SET_NAME, tname, 0, 0, 0) < 0) \
|
|
|
|
|
SCLogDebug("Error setting thread name \"%s\": %s", tname, strerror(errno)); \
|
|
|
|
|
})
|
|
|
|
|
#else
|
|
|
|
|
#define SCSetThreadName(n) (0)
|
|
|
|
|
#define SCSetThreadName(n) ({ \
|
|
|
|
|
strlcpy(t_thread_name, n, sizeof(t_thread_name)); \
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|