|
@@ -23,6 +23,7 @@ unsigned int check_socket_activation(void)
|
|
|
unsigned long nr_fds;
|
|
|
unsigned int i;
|
|
|
int fd;
|
|
|
+ int f;
|
|
|
int err;
|
|
|
|
|
|
s = getenv("LISTEN_PID");
|
|
@@ -54,7 +55,8 @@ unsigned int check_socket_activation(void)
|
|
|
/* So the file descriptors don't leak into child processes. */
|
|
|
for (i = 0; i < nr_fds; ++i) {
|
|
|
fd = FIRST_SOCKET_ACTIVATION_FD + i;
|
|
|
- if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
|
|
|
+ f = fcntl(fd, F_GETFD);
|
|
|
+ if (f == -1 || fcntl(fd, F_SETFD, f | FD_CLOEXEC) == -1) {
|
|
|
/* If we cannot set FD_CLOEXEC then it probably means the file
|
|
|
* descriptor is invalid, so socket activation has gone wrong
|
|
|
* and we should exit.
|