mirror of
https://github.com/systemd/systemd.git
synced 2026-07-24 16:25:52 +00:00
util: when releasing terminal, temporarily disable SIGHUP
This commit is contained in:
13
util.c
13
util.c
@@ -1677,13 +1677,24 @@ fail:
|
||||
|
||||
int release_terminal(void) {
|
||||
int r = 0, fd;
|
||||
struct sigaction sa_old, sa_new;
|
||||
|
||||
if ((fd = open("/dev/tty", O_RDWR)) < 0)
|
||||
if ((fd = open("/dev/tty", O_RDWR|O_NOCTTY|O_NDELAY)) < 0)
|
||||
return -errno;
|
||||
|
||||
/* Temporarily ignore SIGHUP, so that we don't get SIGHUP'ed
|
||||
* by our own TIOCNOTTY */
|
||||
|
||||
zero(sa_new);
|
||||
sa_new.sa_handler = SIG_IGN;
|
||||
sa_new.sa_flags = SA_RESTART;
|
||||
assert_se(sigaction(SIGHUP, &sa_new, &sa_old) == 0);
|
||||
|
||||
if (ioctl(fd, TIOCNOTTY) < 0)
|
||||
r = -errno;
|
||||
|
||||
assert_se(sigaction(SIGHUP, &sa_old, NULL) == 0);
|
||||
|
||||
close_nointr_nofail(fd);
|
||||
return r;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user