diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp index 6036034990..1c7939db11 100644 --- a/Kernel/FileSystem/FIFO.cpp +++ b/Kernel/FileSystem/FIFO.cpp @@ -25,7 +25,12 @@ ErrorOr> FIFO::try_create(UserID uid) ErrorOr> FIFO::open_direction(FIFO::Direction direction) { auto description = TRY(OpenFileDescription::try_create(*this)); - attach(direction); + if (direction == Direction::Reader) { + ++m_readers; + } else if (direction == Direction::Writer) { + ++m_writers; + } + evaluate_block_conditions(); description->set_fifo_direction({}, direction); return description; } @@ -73,19 +78,11 @@ FIFO::FIFO(UserID uid, NonnullOwnPtr buffer) FIFO::~FIFO() = default; -void FIFO::attach(Direction direction) +void FIFO::detach(OpenFileDescription& description) { - if (direction == Direction::Reader) { - ++m_readers; - } else if (direction == Direction::Writer) { - ++m_writers; - } + File::detach(description); - evaluate_block_conditions(); -} - -void FIFO::detach(Direction direction) -{ + auto direction = description.fifo_direction(); if (direction == Direction::Reader) { VERIFY(m_readers); --m_readers; diff --git a/Kernel/FileSystem/FIFO.h b/Kernel/FileSystem/FIFO.h index bce07e5793..bfb19bacbe 100644 --- a/Kernel/FileSystem/FIFO.h +++ b/Kernel/FileSystem/FIFO.h @@ -32,17 +32,12 @@ public: ErrorOr> open_direction(Direction); ErrorOr> open_direction_blocking(Direction); -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Woverloaded-virtual" - void attach(Direction); - void detach(Direction); -#pragma GCC diagnostic pop - private: // ^File virtual ErrorOr write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override; virtual ErrorOr read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override; virtual ErrorOr stat() const override; + virtual void detach(OpenFileDescription&) override; virtual bool can_read(OpenFileDescription const&, u64) const override; virtual bool can_write(OpenFileDescription const&, u64) const override; virtual ErrorOr> pseudo_path(OpenFileDescription const&) const override; diff --git a/Kernel/FileSystem/OpenFileDescription.cpp b/Kernel/FileSystem/OpenFileDescription.cpp index 9be04714da..59521aa192 100644 --- a/Kernel/FileSystem/OpenFileDescription.cpp +++ b/Kernel/FileSystem/OpenFileDescription.cpp @@ -53,8 +53,6 @@ OpenFileDescription::OpenFileDescription(File& file) OpenFileDescription::~OpenFileDescription() { m_file->detach(*this); - if (is_fifo()) - static_cast(m_file.ptr())->detach(fifo_direction()); // FIXME: Should this error path be observed somehow? (void)m_file->close(); if (m_inode)