aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-06-23 14:22:54 +0000
committerChristian Grothoff <christian@grothoff.org>2010-06-23 14:22:54 +0000
commitc9a9a914af8b6961d99fd9e8a97aba05ba6eda5c (patch)
tree39ebf7c26a427d2debd828d3088cd30701637cdc /src
parentc0d4d588c68154a68d5489deb2c67577eb1848c8 (diff)
downloadgnunet-c9a9a914af8b6961d99fd9e8a97aba05ba6eda5c.tar.gz
gnunet-c9a9a914af8b6961d99fd9e8a97aba05ba6eda5c.zip
close pipes on exec
Diffstat (limited to 'src')
-rw-r--r--src/util/disk.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/util/disk.c b/src/util/disk.c
index 60288bc5d..2474f0f2a 100644
--- a/src/util/disk.c
+++ b/src/util/disk.c
@@ -1663,27 +1663,28 @@ GNUNET_DISK_pipe (int blocking)
1663 } 1663 }
1664 p->fd[0]->fd = fd[0]; 1664 p->fd[0]->fd = fd[0];
1665 p->fd[1]->fd = fd[1]; 1665 p->fd[1]->fd = fd[1];
1666 ret = 0;
1667 flags = fcntl (fd[0], F_GETFL);
1668 flags |= FD_CLOEXEC;
1666 if (!blocking) 1669 if (!blocking)
1670 flags |= O_NONBLOCK;
1671 if (0 > fcntl (fd[0], F_SETFL, flags))
1672 ret = -1;
1673 flags = fcntl (fd[1], F_GETFL);
1674 flags |= FD_CLOEXEC;
1675 if (!blocking)
1676 flags |= O_NONBLOCK;
1677 if (0 > fcntl (fd[1], F_SETFL, flags))
1678 ret = -1;
1679 if (ret == -1)
1667 { 1680 {
1668 flags = fcntl (fd[0], F_GETFL); 1681 eno = errno;
1669 flags |= O_NONBLOCK; 1682 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "fcntl");
1670 ret = fcntl (fd[0], F_SETFL, flags); 1683 GNUNET_break (0 == close (p->fd[0]->fd));
1671 if (ret != -1) 1684 GNUNET_break (0 == close (p->fd[1]->fd));
1672 { 1685 GNUNET_free (p);
1673 flags = fcntl (fd[1], F_GETFL); 1686 errno = eno;
1674 flags |= O_NONBLOCK; 1687 return NULL;
1675 ret = fcntl (fd[1], F_SETFL, flags);
1676 }
1677 if (ret == -1)
1678 {
1679 eno = errno;
1680 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "fcntl");
1681 GNUNET_break (0 == close (p->fd[0]->fd));
1682 GNUNET_break (0 == close (p->fd[1]->fd));
1683 GNUNET_free (p);
1684 errno = eno;
1685 return NULL;
1686 }
1687 } 1688 }
1688#else 1689#else
1689 BOOL ret; 1690 BOOL ret;