mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:52:44 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									0579a2db34
								
							
						
					
					
						commit
						d67553e128
					
				
					 2 changed files with 12 additions and 0 deletions
				
			
		|  | @ -46,12 +46,22 @@ Notifier::~Notifier() | ||||||
| 
 | 
 | ||||||
| void Notifier::set_enabled(bool enabled) | void Notifier::set_enabled(bool enabled) | ||||||
| { | { | ||||||
|  |     if (m_fd < 0) | ||||||
|  |         return; | ||||||
|     if (enabled) |     if (enabled) | ||||||
|         Core::EventLoop::register_notifier({}, *this); |         Core::EventLoop::register_notifier({}, *this); | ||||||
|     else |     else | ||||||
|         Core::EventLoop::unregister_notifier({}, *this); |         Core::EventLoop::unregister_notifier({}, *this); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Notifier::close() | ||||||
|  | { | ||||||
|  |     if (m_fd < 0) | ||||||
|  |         return; | ||||||
|  |     set_enabled(false); | ||||||
|  |     m_fd = -1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void Notifier::event(Core::Event& event) | void Notifier::event(Core::Event& event) | ||||||
| { | { | ||||||
|     if (event.type() == Core::Event::NotifierRead && on_ready_to_read) { |     if (event.type() == Core::Event::NotifierRead && on_ready_to_read) { | ||||||
|  |  | ||||||
|  | @ -48,6 +48,8 @@ public: | ||||||
|     Function<void()> on_ready_to_read; |     Function<void()> on_ready_to_read; | ||||||
|     Function<void()> on_ready_to_write; |     Function<void()> on_ready_to_write; | ||||||
| 
 | 
 | ||||||
|  |     void close(); | ||||||
|  | 
 | ||||||
|     int fd() const { return m_fd; } |     int fd() const { return m_fd; } | ||||||
|     unsigned event_mask() const { return m_event_mask; } |     unsigned event_mask() const { return m_event_mask; } | ||||||
|     void set_event_mask(unsigned event_mask) { m_event_mask = event_mask; } |     void set_event_mask(unsigned event_mask) { m_event_mask = event_mask; } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tom
						Tom