2 * SPDX-License-Identifier: LGPL-2.1-only
4 * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
5 * Copyright (C) 2016 Raphaƫl Beamonte <raphael.beamonte@gmail.com>
6 * Copyright (C) 2020 Michael Jeanson <mjeanson@efficios.com>
9 #ifndef _UST_COMMON_COMPAT_PTHREAD_H
10 #define _UST_COMMON_COMPAT_PTHREAD_H
15 #include <lttng/ust-abi.h>
18 #include <pthread_np.h>
21 #if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID)
23 int lttng_pthread_setname_np(const char *name
)
26 * Some implementations don't error out, replicate this behavior for
29 if (strnlen(name
, LTTNG_UST_ABI_PROCNAME_LEN
) >= LTTNG_UST_ABI_PROCNAME_LEN
) {
33 return pthread_setname_np(pthread_self(), name
);
35 #elif defined(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID)
37 int lttng_pthread_setname_np(const char *name
)
39 return pthread_setname_np(name
);
41 #elif defined(HAVE_PTHREAD_SET_NAME_NP_WITH_TID)
44 int lttng_pthread_setname_np(const char *name
)
46 /* Replicate pthread_setname_np's behavior */
47 if (strnlen(name
, LTTNG_UST_ABI_PROCNAME_LEN
) >= LTTNG_UST_ABI_PROCNAME_LEN
) {
51 pthread_set_name_np(pthread_self(), name
);
54 #elif defined(__linux__)
56 /* Fallback on prtctl on Linux */
57 #include <sys/prctl.h>
60 int lttng_pthread_setname_np(const char *name
)
62 /* Replicate pthread_setname_np's behavior */
63 if (strnlen(name
, LTTNG_UST_ABI_PROCNAME_LEN
) >= LTTNG_UST_ABI_PROCNAME_LEN
) {
66 return prctl(PR_SET_NAME
, name
, 0, 0, 0);
69 #error "Please add pthread set name support for your OS."
73 #if defined(HAVE_PTHREAD_GETNAME_NP_WITH_TID)
75 int lttng_pthread_getname_np(char *name
, size_t len
)
77 return pthread_getname_np(pthread_self(), name
, len
);
79 #elif defined(HAVE_PTHREAD_GETNAME_NP_WITHOUT_TID)
81 int lttng_pthread_getname_np(char *name
, size_t len
)
83 return pthread_getname_np(name
, len
);
85 #elif defined(HAVE_PTHREAD_GET_NAME_NP_WITH_TID)
88 int lttng_pthread_getname_np(char *name
, size_t len
)
90 pthread_get_name_np(pthread_self(), name
, len
);
93 #elif defined(__linux__)
95 /* Fallback on prtctl on Linux */
96 #include <sys/prctl.h>
99 int lttng_pthread_getname_np(char *name
, size_t len
)
101 return prctl(PR_GET_NAME
, name
, 0, 0, 0);
105 #error "Please add pthread get name support for your OS."
108 #endif /* _UST_COMMON_COMPAT_PTHREAD_H */