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>
19 * Quit pipe for the main thread. This is used by signal handlers to start the
20 * shutdown sequence of the main thread which will tear down the other threads
21 * in the appropriate order.
23 static int main_quit_pipe
[2] = { -1, -1 };
26 * Init main quit pipe.
28 * Return -1 on error or 0 if all pipes are created.
30 int sessiond_init_main_quit_pipe()
34 ret
= pipe(main_quit_pipe
);
36 PERROR("main quit pipe");
40 for (i
= 0; i
< 2; i
++) {
41 ret
= fcntl(main_quit_pipe
[i
], F_SETFD
, FD_CLOEXEC
);
43 PERROR("fcntl main_quit_pipe");
53 * Wait for a notification on the main quit pipe (with a timeout).
55 * A timeout value of -1U means no timeout.
57 * Returns 1 if the caller should quit, 0 if the timeout was reached, and
58 * -1 if an error was encountered.
60 int sessiond_wait_for_main_quit_pipe(int timeout_ms
)
63 struct lttng_poll_event events
;
65 ret
= lttng_poll_create(&events
, 1, LTTNG_CLOEXEC
);
67 PERROR("Failed to initialize poll/epoll set");
71 ret
= lttng_poll_add(&events
, main_quit_pipe
[0], LPOLLIN
);
73 PERROR("Failed to add file descriptor to poll/epoll set");
77 ret
= lttng_poll_wait(&events
, timeout_ms
);
81 } else if (ret
< 0 && errno
!= EINTR
) {
83 PERROR("Failed to epoll()/poll() main quit pipe");
86 /* Timeout reached. */
90 lttng_poll_clean(&events
);
95 int sessiond_notify_main_quit_pipe()
97 return notify_thread_pipe(main_quit_pipe
[1]);
100 void sessiond_close_main_quit_pipe()
102 utils_close_pipe(main_quit_pipe
);
106 * Create a poll set with O_CLOEXEC and add the main quit pipe to the set.
108 int sessiond_set_thread_pollset(struct lttng_poll_event
*events
, size_t size
)
112 LTTNG_ASSERT(events
);
114 ret
= lttng_poll_create(events
, size
, LTTNG_CLOEXEC
);
119 /* Add main quit pipe */
120 ret
= lttng_poll_add(events
, main_quit_pipe
[0], LPOLLIN
);
This page took 0.034437 seconds and 4 git commands to generate.