-struct load_session_thread_data *load_info;
-
-/* Global hash tables */
-struct lttng_ht *agent_apps_ht_by_sock = NULL;
-
-/*
- * Whether sessiond is ready for commands/health check requests.
- * NR_LTTNG_SESSIOND_READY must match the number of calls to
- * sessiond_notify_ready().
- */
-#define NR_LTTNG_SESSIOND_READY 3
-int lttng_sessiond_ready = NR_LTTNG_SESSIOND_READY;
-
-/* Notify parents that we are ready for cmd and health check */
-LTTNG_HIDDEN
-void sessiond_notify_ready(void)
-{
- if (uatomic_sub_return(<tng_sessiond_ready, 1) == 0) {
- /*
- * Notify parent pid that we are ready to accept command
- * for client side. This ppid is the one from the
- * external process that spawned us.
- */
- if (opt_sig_parent) {
- kill(ppid, SIGUSR1);
- }
-
- /*
- * Notify the parent of the fork() process that we are
- * ready.
- */
- if (opt_daemon || opt_background) {
- kill(child_ppid, SIGUSR1);
- }
- }
-}
-
-static
-void setup_consumerd_path(void)
-{
- const char *bin, *libdir;
-
- /*
- * Allow INSTALL_BIN_PATH to be used as a target path for the
- * native architecture size consumer if CONFIG_CONSUMER*_PATH
- * has not been defined.
- */
-#if (CAA_BITS_PER_LONG == 32)
- if (!consumerd32_bin[0]) {
- consumerd32_bin = INSTALL_BIN_PATH "/" CONSUMERD_FILE;
- }
- if (!consumerd32_libdir[0]) {
- consumerd32_libdir = INSTALL_LIB_PATH;
- }
-#elif (CAA_BITS_PER_LONG == 64)
- if (!consumerd64_bin[0]) {
- consumerd64_bin = INSTALL_BIN_PATH "/" CONSUMERD_FILE;
- }
- if (!consumerd64_libdir[0]) {
- consumerd64_libdir = INSTALL_LIB_PATH;
- }
-#else
-#error "Unknown bitness"
-#endif
-
- /*
- * runtime env. var. overrides the build default.
- */
- bin = lttng_secure_getenv("LTTNG_CONSUMERD32_BIN");
- if (bin) {
- consumerd32_bin = bin;
- }
- bin = lttng_secure_getenv("LTTNG_CONSUMERD64_BIN");
- if (bin) {
- consumerd64_bin = bin;
- }
- libdir = lttng_secure_getenv("LTTNG_CONSUMERD32_LIBDIR");
- if (libdir) {
- consumerd32_libdir = libdir;
- }
- libdir = lttng_secure_getenv("LTTNG_CONSUMERD64_LIBDIR");
- if (libdir) {
- consumerd64_libdir = libdir;
- }
-}
-
-static
-int __sessiond_set_thread_pollset(struct lttng_poll_event *events, size_t size,
- int *a_pipe)
-{
- int ret;
-
- assert(events);
-
- ret = lttng_poll_create(events, size, LTTNG_CLOEXEC);
- if (ret < 0) {
- goto error;
- }
-
- /* Add quit pipe */
- ret = lttng_poll_add(events, a_pipe[0], LPOLLIN | LPOLLERR);
- if (ret < 0) {
- goto error;
- }
-
- return 0;
-
-error:
- return ret;
-}
-
-/*
- * Create a poll set with O_CLOEXEC and add the thread quit pipe to the set.
- */
-int sessiond_set_thread_pollset(struct lttng_poll_event *events, size_t size)
-{
- return __sessiond_set_thread_pollset(events, size, thread_quit_pipe);
-}
-
-/*
- * Create a poll set with O_CLOEXEC and add the thread quit pipe to the set.
- */
-int sessiond_set_ht_cleanup_thread_pollset(struct lttng_poll_event *events,
- size_t size)
-{
- return __sessiond_set_thread_pollset(events, size,
- ht_cleanup_quit_pipe);
-}
-
-static
-int __sessiond_check_thread_quit_pipe(int fd, uint32_t events, int a_pipe)
-{
- if (fd == a_pipe && (events & LPOLLIN)) {
- return 1;
- }
- return 0;
-}
-
-/*
- * Check if the thread quit pipe was triggered.
- *
- * Return 1 if it was triggered else 0;
- */
-int sessiond_check_thread_quit_pipe(int fd, uint32_t events)
-{
- return __sessiond_check_thread_quit_pipe(fd, events,
- thread_quit_pipe[0]);
-}