summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/forkfd
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/forkfd')
-rw-r--r--src/3rdparty/forkfd/forkfd_linux.c68
1 files changed, 0 insertions, 68 deletions
diff --git a/src/3rdparty/forkfd/forkfd_linux.c b/src/3rdparty/forkfd/forkfd_linux.c
index ea587b7ed5..27ab09f748 100644
--- a/src/3rdparty/forkfd/forkfd_linux.c
+++ b/src/3rdparty/forkfd/forkfd_linux.c
@@ -120,76 +120,8 @@ static int detect_clone_pidfd_support()
sys_waitid(P_PIDFD, INT_MAX, NULL, WEXITED|WNOHANG, NULL);
return errno == EBADF ? 1 : -1;
-
-#if 0
- /* Detection methods not used: */
-#ifdef __NR_pidfd_send_signal
- /*
- * pidfd_send_signal was added at the same time as CLONE_PIDFD, so if this
- * system call exists, so does CLONE_PIDFD. We make a system call with a
- * file descriptor of -1: if it's supported, we get EBADF; otherwise, the
- * typical ENOSYS.
- */
- syscall(__NR_pidfd_send_signal, -1, 0, NULL, 0);
- return errno == EBADF ? 1 : -1;
-#else
- /*
- * detect kernel CLONE_PIDFD support directly: CLONE_PIDFD |
- * CLONE_PARENT_SETTID causes EINVAL on kernel >= 5.2, but on older
- * kernels, that combination is ignored. Therefore, if we EINVAL, we know
- * that CLONE_PIDFD is supported.
- *
- * To avoid creating a process unnecessarily, we add CLONE_NEWUTS, which is
- * a privileged operation. Therefore, if we're not root, we'll get EPERM.
- * If we're root, we need to exit the child process and wait for it on the
- * parent.
- */
- pid_t pid = sys_clone(CLONE_PIDFD | CLONE_PARENT_SETTID | CLONE_NEWUTS, NULL);
- if (pid == -1 && errno == EINVAL)
- return 1;
- if (pid == 0)
- _exit(0); /* Child */
- if (pid > 0)
- sys_waitid(P_PID, pid, NULL, WEXITED | __WALL, NULL); /* Parent */
-
- return -1;
-#endif
-#endif // 0
}
-#if 0
-/* To be used if waitid's P_PIDFD support gets bumped to 5.4 */
-static pid_t pidfd_to_pid(int pidfd)
-{
- static const char pidtext[] = "Pid:\t";
- int fdinfo;
- ssize_t ret;
- char buf[256];
- char *text, *endpid = NULL;
-
- snprintf(buf, sizeof(buf), "/proc/self/fdinfo/%d", pidfd);
- fdinfo = open(buf, O_RDONLY | O_CLOEXEC);
- if (fdinfo < 0)
- return fdinfo;
-
- ret = read(fdinfo, buf, sizeof(buf) - 1);
- close(fdinfo);
- if (ret < 1)
- return ret;
-
- buf[ret] = '\0';
- text = (char *) memmem(buf, ret, pidtext, sizeof(pidtext) - 1);
- if (text == NULL)
- return -1;
-
- text += sizeof(pidtext) - 1;
- ret = strtol(text, &endpid, 10);
- if (ret < 0 || (endpid && *endpid != '\n'))
- return -1;
- return ret;
-}
-#endif
-
int system_has_forkfd()
{
return ffd_atomic_load(&system_forkfd_state, FFD_ATOMIC_RELAXED) > 0;