- /*
- * Notify the parent of the fork() process that we are
- * ready.
- */
- if (config.daemonize || config.background) {
- kill(child_ppid, SIGUSR1);
- }
-}
-
-LTTNG_HIDDEN
-void sessiond_notify_ready(void)
-{
- /*
- * This memory barrier is paired with the one performed by
- * the client thread after it has seen that 'lttng_sessiond_ready' is 0.
- *
- * The purpose of these memory barriers is to ensure that all
- * initialization operations of the various threads that call this
- * function to signal that they are ready are commited/published
- * before the client thread can see the 'lttng_sessiond_ready' counter
- * reach 0.
- *
- * Note that this could be a 'write' memory barrier, but a full barrier
- * is used in case the code using this utility changes. The performance
- * implications of this choice are minimal since this is a slow path.
- */
- cmm_smp_mb();
- uatomic_sub(<tng_sessiond_ready, 1);
-}
-
-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);
-}
-
-/*
- * Init thread quit pipe.
- *
- * Return -1 on error or 0 if all pipes are created.
- */
-static int __init_thread_quit_pipe(int *a_pipe)
-{
- int ret, i;
-
- ret = pipe(a_pipe);
- if (ret < 0) {
- PERROR("thread quit pipe");
- goto error;
- }
-
- for (i = 0; i < 2; i++) {
- ret = fcntl(a_pipe[i], F_SETFD, FD_CLOEXEC);
- if (ret < 0) {
- PERROR("fcntl");
- goto error;
- }
- }
-
-error:
- return ret;
-}
-
-static int init_thread_quit_pipe(void)
-{
- return __init_thread_quit_pipe(thread_quit_pipe);
-}