From a79454f6a61b677c8f00c40cafd1e3754fd5c6ca Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Thu, 9 Mar 2023 18:00:23 +0100
Subject: [PATCH] io/FileDescriptor: fold CreateSignalFD() into the SignalFD
 constructor

---
 src/io/FileDescriptor.cxx | 15 ---------------
 src/io/FileDescriptor.hxx |  8 --------
 src/system/SignalFD.cxx   |  9 ++++++++-
 3 files changed, 8 insertions(+), 24 deletions(-)

diff --git a/src/io/FileDescriptor.cxx b/src/io/FileDescriptor.cxx
index 354829c7b..1497e6f64 100644
--- a/src/io/FileDescriptor.cxx
+++ b/src/io/FileDescriptor.cxx
@@ -236,21 +236,6 @@ FileDescriptor::CheckDuplicate(FileDescriptor new_fd) const noexcept
 
 #endif
 
-#ifdef __linux__
-
-bool
-FileDescriptor::CreateSignalFD(const sigset_t *mask) noexcept
-{
-	int new_fd = ::signalfd(fd, mask, SFD_NONBLOCK|SFD_CLOEXEC);
-	if (new_fd < 0)
-		return false;
-
-	fd = new_fd;
-	return true;
-}
-
-#endif
-
 bool
 FileDescriptor::Rewind() const noexcept
 {
diff --git a/src/io/FileDescriptor.hxx b/src/io/FileDescriptor.hxx
index 92f7db15e..628a0f3fc 100644
--- a/src/io/FileDescriptor.hxx
+++ b/src/io/FileDescriptor.hxx
@@ -9,10 +9,6 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#ifdef __linux__
-#include <csignal>
-#endif
-
 #ifdef _WIN32
 #include <wchar.h>
 #endif
@@ -180,10 +176,6 @@ public:
 	bool CheckDuplicate(FileDescriptor new_fd) const noexcept;
 #endif
 
-#ifdef __linux__
-	bool CreateSignalFD(const sigset_t *mask) noexcept;
-#endif
-
 	/**
 	 * Close the file descriptor.  It should not be called on an
 	 * "undefined" object.  After this call, IsDefined() is guaranteed
diff --git a/src/system/SignalFD.cxx b/src/system/SignalFD.cxx
index ed0883b85..ba3c4d058 100644
--- a/src/system/SignalFD.cxx
+++ b/src/system/SignalFD.cxx
@@ -11,8 +11,15 @@
 void
 SignalFD::Create(const sigset_t &mask)
 {
-	if (!fd.CreateSignalFD(&mask))
+	int new_fd = ::signalfd(fd.Get(), &mask, SFD_NONBLOCK|SFD_CLOEXEC);
+	if (new_fd < 0)
 		throw MakeErrno("signalfd() failed");
+
+	if (!fd.IsDefined()) {
+		fd = UniqueFileDescriptor{new_fd};
+	}
+
+	assert(new_fd == fd.Get());
 }
 
 int