2 * Copyright (C) 2011 EfficiOS Inc.
3 * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 * Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 * SPDX-License-Identifier: GPL-2.0-only
10 #include "lttng-sessiond.hpp"
13 #include <common/utils.hpp>
18 * Quit pipe for the main thread. This is used by signal handlers to start the
19 * shutdown sequence of the main thread which will tear down the other threads
20 * in the appropriate order.
22 static int main_quit_pipe
[2] = { -1, -1 };
25 * Init main quit pipe.
27 * Return -1 on error or 0 if all pipes are created.
29 int sessiond_init_main_quit_pipe()
33 ret
= pipe(main_quit_pipe
);
35 PERROR("main quit pipe");
39 for (i
= 0; i
< 2; i
++) {
40 ret
= fcntl(main_quit_pipe
[i
], F_SETFD
, FD_CLOEXEC
);
42 PERROR("fcntl main_quit_pipe");
52 * Wait for a notification on the main quit pipe (with a timeout).
54 * A timeout value of -1U means no timeout.
56 * Returns 1 if the caller should quit, 0 if the timeout was reached, and
57 * -1 if an error was encountered.
59 int sessiond_wait_for_main_quit_pipe(int timeout_ms
)
62 struct lttng_poll_event events
;
64 ret
= lttng_poll_create(&events
, 1, LTTNG_CLOEXEC
);
66 PERROR("Failed to initialize poll/epoll set");
70 ret
= lttng_poll_add(&events
, main_quit_pipe
[0], LPOLLIN
);
72 PERROR("Failed to add file descriptor to poll/epoll set");
76 ret
= lttng_poll_wait(&events
, timeout_ms
);
80 } else if (ret
< 0 && errno
!= EINTR
) {
82 PERROR("Failed to epoll()/poll() main quit pipe");
85 /* Timeout reached. */
89 lttng_poll_clean(&events
);
94 int sessiond_notify_main_quit_pipe()
96 return notify_thread_pipe(main_quit_pipe
[1]);
99 void sessiond_close_main_quit_pipe()
101 utils_close_pipe(main_quit_pipe
);
105 * Create a poll set with O_CLOEXEC and add the main quit pipe to the set.
107 int sessiond_set_thread_pollset(struct lttng_poll_event
*events
, size_t size
)
111 LTTNG_ASSERT(events
);
113 ret
= lttng_poll_create(events
, size
, LTTNG_CLOEXEC
);
118 /* Add main quit pipe */
119 ret
= lttng_poll_add(events
, main_quit_pipe
[0], LPOLLIN
);
This page took 0.035885 seconds and 4 git commands to generate.