util: when releasing terminal, temporarily disable SIGHUP

This commit is contained in:
Lennart Poettering
2010-04-24 02:32:07 +02:00
parent b29a8e58fa
commit 57cd2192d0

13
util.c
View File

@@ -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;
}