-static int process_pty_loop(int master, sigset_t *mask, pid_t kill_pid, int signo) {
- char in_buffer[LINE_MAX], out_buffer[LINE_MAX];
- size_t in_buffer_full = 0, out_buffer_full = 0;
- struct epoll_event stdin_ev, stdout_ev, master_ev, signal_ev;
- bool stdin_readable = false, stdout_writable = false, master_readable = false, master_writable = false;
- bool stdin_hangup = false, stdout_hangup = false, master_hangup = false;
- bool tried_orderly_shutdown = false, process_signalfd = false, quit = false;
- usec_t escape_timestamp = 0;
- unsigned escape_counter = 0;
- _cleanup_close_ int ep = -1, signal_fd = -1;
-
- assert(master >= 0);
- assert(mask);
- assert(kill_pid == 0 || kill_pid > 1);
- assert(signo >= 0 && signo < _NSIG);
-
- fd_nonblock(STDIN_FILENO, true);
- fd_nonblock(STDOUT_FILENO, true);
- fd_nonblock(master, true);
-
- signal_fd = signalfd(-1, mask, SFD_NONBLOCK|SFD_CLOEXEC);
- if (signal_fd < 0) {
- log_error("signalfd(): %m");
- return -errno;
- }
-
- ep = epoll_create1(EPOLL_CLOEXEC);
- if (ep < 0) {
- log_error("Failed to create epoll: %m");
- return -errno;
- }