mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-02-04 01:20:41 +01:00
dbus-spawn-unix: If a fd is not close-on-exec, look it up in /proc/self/fd
In operating systems where /proc/self/fd works like it does on Linux (Linux itself, and FreeBSD with Linux /proc emulation) this will give us a clue about the fd that was leaked or opened incorrectly. Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
parent
cdcf3c04dd
commit
ebf487ef03
1 changed files with 16 additions and 1 deletions
|
|
@ -1063,7 +1063,22 @@ do_exec (int child_err_report_fd,
|
||||||
retval = fcntl (i, F_GETFD);
|
retval = fcntl (i, F_GETFD);
|
||||||
|
|
||||||
if (retval != -1 && !(retval & FD_CLOEXEC))
|
if (retval != -1 && !(retval & FD_CLOEXEC))
|
||||||
_dbus_warn ("Fd %d did not have the close-on-exec flag set!", i);
|
{
|
||||||
|
char description[256] = { 0 };
|
||||||
|
char proc_self_fd[256] = { 0 };
|
||||||
|
size_t description_length = sizeof (description) - 1;
|
||||||
|
|
||||||
|
snprintf (proc_self_fd, sizeof (proc_self_fd) - 1,
|
||||||
|
"/proc/self/fd/%d", i);
|
||||||
|
proc_self_fd[sizeof (proc_self_fd) - 1] = '\0';
|
||||||
|
|
||||||
|
if (readlink (proc_self_fd, description, description_length) <= 0)
|
||||||
|
snprintf (description, sizeof (description) - 1, "(unknown)");
|
||||||
|
|
||||||
|
description[sizeof (description) - 1] = '\0';
|
||||||
|
_dbus_warn ("Fd %d \"%s\" did not have the close-on-exec flag set!",
|
||||||
|
i, description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue