summaryrefslogtreecommitdiffhomepage
path: root/test/syscalls/linux
diff options
context:
space:
mode:
authorAdin Scannell <ascannell@google.com>2019-10-10 12:45:34 -0700
committergVisor bot <gvisor-bot@google.com>2019-10-10 12:51:22 -0700
commitf8b18593198cf7ca1adfca19d846e66080b07942 (patch)
tree253ea05b2729fbac2e7ddb25e3030474535ab782 /test/syscalls/linux
parent14952d01fb5fa03a40dbb241b4c12f5a400a3577 (diff)
Fix signalfd polling.
The signalfd descriptors otherwise always show as available. This can lead programs to spin, assuming they are looking to see what signals are pending. Updates #139 PiperOrigin-RevId: 274017890
Diffstat (limited to 'test/syscalls/linux')
-rw-r--r--test/syscalls/linux/signalfd.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/syscalls/linux/signalfd.cc b/test/syscalls/linux/signalfd.cc
index 54c598627..9379d5878 100644
--- a/test/syscalls/linux/signalfd.cc
+++ b/test/syscalls/linux/signalfd.cc
@@ -312,6 +312,23 @@ TEST(Signalfd, KillStillKills) {
EXPECT_EXIT(tgkill(getpid(), gettid(), SIGKILL), KilledBySignal(SIGKILL), "");
}
+TEST(Signalfd, Ppoll) {
+ sigset_t mask;
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGKILL);
+ FileDescriptor fd =
+ ASSERT_NO_ERRNO_AND_VALUE(NewSignalFD(&mask, SFD_CLOEXEC));
+
+ // Ensure that the given ppoll blocks.
+ struct pollfd pfd = {};
+ pfd.fd = fd.get();
+ pfd.events = POLLIN;
+ struct timespec timeout = {};
+ timeout.tv_sec = 1;
+ EXPECT_THAT(RetryEINTR(ppoll)(&pfd, 1, &timeout, &mask),
+ SyscallSucceedsWithValue(0));
+}
+
} // namespace
} // namespace testing