From e90c3fec104be1f6d598be738b30366506d89358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 6 Oct 2005 08:55:19 +0000 Subject: [PATCH] dup2() didn't close the evicted file descriptor (ie. call its close hook) - it just removed it. Added comment why there is an explicit dup2() at all. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14312 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/fd.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/system/kernel/fs/fd.c b/src/system/kernel/fs/fd.c index 3e1c5059d0..5cbac446d4 100644 --- a/src/system/kernel/fs/fd.c +++ b/src/system/kernel/fs/fd.c @@ -208,6 +208,13 @@ dup_fd(int fd, bool kernel) } +/** POSIX says this should be the same as: + * close(newfd); + * fcntl(oldfd, F_DUPFD, newfd); + * + * We do dup2() directly to be thread-safe. + */ + static int dup2_fd(int oldfd, int newfd, bool kernel) { @@ -250,8 +257,10 @@ dup2_fd(int oldfd, int newfd, bool kernel) mutex_unlock(&context->io_mutex); // Say bye bye to the evicted fd - if (evicted) + if (evicted) { + close_fd(evicted); put_fd(evicted); + } return newfd; }