mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 14:25:49 +00:00
zdtm: pty00 -- Count for SIGHUP
Just to make sure we're not loosing signals after restore. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Acked-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
37cf27d33e
commit
e90d0f1214
@@ -12,6 +12,13 @@
|
|||||||
const char *test_doc = "Check, that pseudoterminals are restored";
|
const char *test_doc = "Check, that pseudoterminals are restored";
|
||||||
const char *test_author = "Andrey Vagin <avagin@openvz.org>";
|
const char *test_author = "Andrey Vagin <avagin@openvz.org>";
|
||||||
|
|
||||||
|
static unsigned int nr_sighups;
|
||||||
|
|
||||||
|
static void signal_handler_sighup(int signum)
|
||||||
|
{
|
||||||
|
nr_sighups++;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char ** argv)
|
int main(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
int fdm, fds, ret;
|
int fdm, fds, ret;
|
||||||
@@ -19,8 +26,22 @@ int main(int argc, char ** argv)
|
|||||||
char buf[10];
|
char buf[10];
|
||||||
const char teststr[] = "hello\n";
|
const char teststr[] = "hello\n";
|
||||||
|
|
||||||
|
struct sigaction sa = {
|
||||||
|
.sa_handler = signal_handler_sighup,
|
||||||
|
.sa_flags = 0,
|
||||||
|
};
|
||||||
|
|
||||||
test_init(argc, argv);
|
test_init(argc, argv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On closing control terminal we're expecting to
|
||||||
|
* receive SIGHUP, so make sure it's delivered.
|
||||||
|
*/
|
||||||
|
if (sigaction(SIGHUP, &sa, 0)) {
|
||||||
|
fail("sigaction failed\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
fdm = open("/dev/ptmx", O_RDWR);
|
fdm = open("/dev/ptmx", O_RDWR);
|
||||||
if (fdm == -1) {
|
if (fdm == -1) {
|
||||||
err("open(%s) failed", "/dev/ptmx");
|
err("open(%s) failed", "/dev/ptmx");
|
||||||
@@ -54,8 +75,6 @@ int main(int argc, char ** argv)
|
|||||||
|
|
||||||
test_waitsig();
|
test_waitsig();
|
||||||
|
|
||||||
signal(SIGHUP, SIG_IGN);
|
|
||||||
|
|
||||||
/* Check connectivity */
|
/* Check connectivity */
|
||||||
ret = write(fdm, teststr, sizeof(teststr) - 1);
|
ret = write(fdm, teststr, sizeof(teststr) - 1);
|
||||||
if (ret != sizeof(teststr) - 1) {
|
if (ret != sizeof(teststr) - 1) {
|
||||||
@@ -74,10 +93,19 @@ int main(int argc, char ** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nr_sighups != 0) {
|
||||||
|
fail("Expected 0 SIGHUP before closing control terminal but got %d", nr_sighups);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
close(fdm);
|
close(fdm);
|
||||||
close(fds);
|
close(fds);
|
||||||
|
|
||||||
pass();
|
if (nr_sighups != 1) {
|
||||||
|
fail("Expected 1 SIGHUP after closing control terminal but got %d", nr_sighups);
|
||||||
|
return 1;
|
||||||
|
} else
|
||||||
|
pass();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user