2 * Copyright (C) 2020 Michael Jeanson <mjeanson@efficios.com>
4 * SPDX-License-Identifier: GPL-2.0-only
8 #ifndef _COMPAT_PTHREAD_H
9 #define _COMPAT_PTHREAD_H
12 #include <common/compat/errno.h>
15 #define LTTNG_PTHREAD_NAMELEN 16
17 #if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID)
19 int lttng_pthread_setname_np(const char *name
)
22 * Some implementations don't error out, replicate this behavior for
25 if (strnlen(name
, LTTNG_PTHREAD_NAMELEN
) >= LTTNG_PTHREAD_NAMELEN
) {
29 return pthread_setname_np(pthread_self(), name
);
33 int lttng_pthread_getname_np(char *name
, size_t len
)
35 return pthread_getname_np(pthread_self(), name
, len
);
37 #elif defined(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID)
39 int lttng_pthread_setname_np(const char *name
)
41 return pthread_setname_np(name
);
45 int lttng_pthread_getname_np(char *name
, size_t len
)
47 return pthread_getname_np(name
, len
);
49 #elif defined(HAVE_PTHREAD_SET_NAME_NP_WITH_TID)
51 #include <pthread_np.h>
53 int lttng_pthread_setname_np(const char *name
)
55 /* Replicate pthread_setname_np's behavior. */
56 if (strnlen(name
, LTTNG_PTHREAD_NAMELEN
) >= LTTNG_PTHREAD_NAMELEN
) {
60 pthread_set_name_np(pthread_self(), name
);
65 int lttng_pthread_getname_np(char *name
, size_t len
)
67 pthread_get_name_np(pthread_self(), name
, len
);
70 #elif defined(__linux__)
72 /* Fallback on prtctl on Linux */
73 #include <sys/prctl.h>
76 int lttng_pthread_setname_np(const char *name
)
78 /* Replicate pthread_setname_np's behavior. */
79 if (strnlen(name
, LTTNG_UST_ABI_PROCNAME_LEN
) >= LTTNG_UST_ABI_PROCNAME_LEN
) {
82 return prctl(PR_SET_NAME
, name
, 0, 0, 0);
86 int lttng_pthread_getname_np(char *name
, size_t len
)
88 return prctl(PR_GET_NAME
, name
, 0, 0, 0);
92 * For platforms without thread name support, do nothing.
95 int lttng_pthread_setname_np(const char *name
)
101 int lttng_pthread_getname_np(char *name
, size_t len
)
107 #endif /* _COMPAT_PTHREAD_H */