#include <lttng/ust-error.h>
#include <lttng/ust-ctl.h>
#include <lttng/ust-libc-wrapper.h>
#include <lttng/ust-error.h>
#include <lttng/ust-ctl.h>
#include <lttng/ust-libc-wrapper.h>
extern void lttng_ring_buffer_client_discard_exit(void);
extern void lttng_ring_buffer_client_discard_rt_exit(void);
extern void lttng_ring_buffer_metadata_client_exit(void);
extern void lttng_ring_buffer_client_discard_exit(void);
extern void lttng_ring_buffer_client_discard_rt_exit(void);
extern void lttng_ring_buffer_metadata_client_exit(void);
extern void lttng_counter_client_percpu_64_modular_exit(void);
static char *get_map_shm(struct sock_info *sock_info);
extern void lttng_counter_client_percpu_64_modular_exit(void);
static char *get_map_shm(struct sock_info *sock_info);
int sock, struct ustcomm_ust_msg *lum)
{
struct lttng_ust_bytecode_node *bytecode = NULL;
int sock, struct ustcomm_ust_msg *lum)
{
struct lttng_ust_bytecode_node *bytecode = NULL;
const struct lttng_ust_abi_objd_ops *ops;
uint32_t data_size, data_size_max, reloc_offset;
uint64_t seqnum;
const struct lttng_ust_abi_objd_ops *ops;
uint32_t data_size, data_size_max, reloc_offset;
uint64_t seqnum;
data_size = lum->u.filter.data_size;
data_size_max = LTTNG_UST_ABI_FILTER_BYTECODE_MAX_LEN;
reloc_offset = lum->u.filter.reloc_offset;
seqnum = lum->u.filter.seqnum;
break;
case LTTNG_UST_ABI_CAPTURE:
data_size = lum->u.filter.data_size;
data_size_max = LTTNG_UST_ABI_FILTER_BYTECODE_MAX_LEN;
reloc_offset = lum->u.filter.reloc_offset;
seqnum = lum->u.filter.seqnum;
break;
case LTTNG_UST_ABI_CAPTURE:
data_size = lum->u.capture.data_size;
data_size_max = LTTNG_UST_ABI_CAPTURE_BYTECODE_MAX_LEN;
reloc_offset = lum->u.capture.reloc_offset;
data_size = lum->u.capture.data_size;
data_size_max = LTTNG_UST_ABI_CAPTURE_BYTECODE_MAX_LEN;
reloc_offset = lum->u.capture.reloc_offset;
* liblttng-ust.so to increment the dynamic loader's internal refcount for
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* liblttng-ust.so to increment the dynamic loader's internal refcount for
* this library so it never becomes zero, thus never gets unloaded from the
* address space of the process. Since we are already running in the
* simply increment the refcount and no additionnal work is needed by the
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* simply increment the refcount and no additionnal work is needed by the
* dynamic loader as the shared library is already loaded in the address
* space. As a safe guard, we use the RTLD_NODELETE flag to prevent
* never happen). Do the return value check but discard the handle at the
* end of the function as it's not needed.
*/
* never happen). Do the return value check but discard the handle at the
* end of the function as it's not needed.
*/
* in the middle of an tracepoint or ust tracing state modification.
* Holding this mutex protects these structures across fork and clone.
*/
* in the middle of an tracepoint or ust tracing state modification.
* Holding this mutex protects these structures across fork and clone.
*/
* This is meant for forks() that have tracing in the child between the
* fork and following exec call (if there is any).
*/
* This is meant for forks() that have tracing in the child between the
* fork and following exec call (if there is any).
*/
{
if (URCU_TLS(lttng_ust_nest_count))
return;
lttng_context_vpid_reset();
lttng_context_vtid_reset();
{
if (URCU_TLS(lttng_ust_nest_count))
return;
lttng_context_vpid_reset();
lttng_context_vtid_reset();