mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
Add per-task limit for open fd's. Hard-coded at 16 for now.
This commit is contained in:
parent
2749e7f1c2
commit
384e2f24d4
Notes:
sideshowbarker
2024-07-19 18:38:20 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/384e2f24d41
2 changed files with 10 additions and 24 deletions
|
@ -746,31 +746,18 @@ int Task::sys$getcwd(char* buffer, size_t size)
|
|||
|
||||
int Task::sys$open(const char* path, size_t pathLength)
|
||||
{
|
||||
Task::checkSanity("sys$open");
|
||||
#ifdef DEBUG_IO
|
||||
kprintf("Task::sys$open(): PID=%u, path=%s {%u}\n", m_pid, path, pathLength);
|
||||
#endif
|
||||
auto* handle = openFile(String(path, pathLength));
|
||||
if (handle)
|
||||
return handle->fd();
|
||||
return -1;
|
||||
}
|
||||
|
||||
FileHandle* Task::openFile(String&& path)
|
||||
{
|
||||
auto handle = VirtualFileSystem::the().open(move(path), m_cwd.ptr());
|
||||
if (!handle) {
|
||||
#ifdef DEBUG_IO
|
||||
kprintf("vfs::open() failed\n");
|
||||
#endif
|
||||
return nullptr;
|
||||
}
|
||||
handle->setFD(m_fileHandles.size());
|
||||
#ifdef DEBUG_IO
|
||||
kprintf("vfs::open() worked! handle=%p, fd=%d\n", handle.ptr(), handle->fd());
|
||||
#endif
|
||||
m_fileHandles.append(move(handle)); // FIXME: allow non-move Vector::append
|
||||
return m_fileHandles.last().ptr();
|
||||
if (m_fileHandles.size() >= m_maxFileHandles)
|
||||
return -EMFILE;
|
||||
auto handle = VirtualFileSystem::the().open(String(path, pathLength), m_cwd.ptr());
|
||||
if (!handle)
|
||||
return -ENOENT; // FIXME: Detailed error.
|
||||
int fd = m_fileHandles.size();
|
||||
handle->setFD(fd);
|
||||
m_fileHandles.append(move(handle));
|
||||
return fd;
|
||||
}
|
||||
|
||||
int Task::sys$kill(pid_t pid, int sig)
|
||||
|
|
|
@ -124,8 +124,6 @@ private:
|
|||
|
||||
Task(String&& name, uid_t, gid_t, pid_t parentPID, RingLevel);
|
||||
|
||||
FileHandle* openFile(String&&);
|
||||
|
||||
void allocateLDT();
|
||||
|
||||
Task* m_prev { nullptr };
|
||||
|
@ -151,6 +149,7 @@ private:
|
|||
dword m_timesScheduled { 0 };
|
||||
pid_t m_waitee { -1 };
|
||||
int m_fdBlockedOnRead { -1 };
|
||||
size_t m_maxFileHandles { 16 };
|
||||
|
||||
RetainPtr<VirtualFileSystem::Node> m_cwd;
|
||||
|
||||
|
|
Loading…
Reference in a new issue