Skip to content

Commit d67553e

Browse files
tomutaawesomekling
authored andcommitted
LibCore: Add Notifier::close
If a file descriptor is being closed, we need to permanently disable any Notifier and remove it from the event loop. This method removes the notifier and disables it so that the EventLoop does not use a invalid file descriptor.
1 parent 0579a2d commit d67553e

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

Libraries/LibCore/Notifier.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,22 @@ Notifier::~Notifier()
4646

4747
void Notifier::set_enabled(bool enabled)
4848
{
49+
if (m_fd < 0)
50+
return;
4951
if (enabled)
5052
Core::EventLoop::register_notifier({}, *this);
5153
else
5254
Core::EventLoop::unregister_notifier({}, *this);
5355
}
5456

57+
void Notifier::close()
58+
{
59+
if (m_fd < 0)
60+
return;
61+
set_enabled(false);
62+
m_fd = -1;
63+
}
64+
5565
void Notifier::event(Core::Event& event)
5666
{
5767
if (event.type() == Core::Event::NotifierRead && on_ready_to_read) {

Libraries/LibCore/Notifier.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class Notifier : public Object {
4848
Function<void()> on_ready_to_read;
4949
Function<void()> on_ready_to_write;
5050

51+
void close();
52+
5153
int fd() const { return m_fd; }
5254
unsigned event_mask() const { return m_event_mask; }
5355
void set_event_mask(unsigned event_mask) { m_event_mask = event_mask; }

0 commit comments

Comments
 (0)