summaryrefslogtreecommitdiff
path: root/Kernel/Syscalls/anon_create.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Syscalls/anon_create.cpp')
-rw-r--r--Kernel/Syscalls/anon_create.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/Kernel/Syscalls/anon_create.cpp b/Kernel/Syscalls/anon_create.cpp
index 334e7e9797..c87196b8b5 100644
--- a/Kernel/Syscalls/anon_create.cpp
+++ b/Kernel/Syscalls/anon_create.cpp
@@ -25,7 +25,6 @@ ErrorOr<FlatPtr> Process::sys$anon_create(size_t size, int options)
if (size > NumericLimits<ssize_t>::max())
return EINVAL;
- auto new_fd = TRY(allocate_fd());
auto vmobject = TRY(Memory::AnonymousVMObject::try_create_purgeable_with_size(size, AllocationStrategy::AllocateNow));
auto anon_file = TRY(AnonymousFile::try_create(move(vmobject)));
auto description = TRY(OpenFileDescription::try_create(move(anon_file)));
@@ -37,8 +36,11 @@ ErrorOr<FlatPtr> Process::sys$anon_create(size_t size, int options)
if (options & O_CLOEXEC)
fd_flags |= FD_CLOEXEC;
- m_fds.with_exclusive([&](auto& fds) { fds[new_fd.fd].set(move(description), fd_flags); });
- return new_fd.fd;
+ return m_fds.with_exclusive([&](auto& fds) -> ErrorOr<FlatPtr> {
+ auto new_fd = TRY(fds.allocate());
+ fds[new_fd.fd].set(move(description), fd_flags);
+ return new_fd.fd;
+ });
}
}