Browse Source

LibCore: Make CSocket's notifiers into children of the CSocket

The Inspector app quickly exposes crappy flat object hiearchies without
parent/child relationships. This is one of many commits that improves
the situation by making parent/child CObject relationships explicit.
Andreas Kling 6 năm trước cách đây
mục cha
commit
1b3599fbbc

+ 3 - 2
Libraries/LibCore/CNotifier.cpp

@@ -2,8 +2,9 @@
 #include <LibCore/CEventLoop.h>
 #include <LibCore/CNotifier.h>
 
-CNotifier::CNotifier(int fd, unsigned event_mask)
-    : m_fd(fd)
+CNotifier::CNotifier(int fd, unsigned event_mask, CObject* parent)
+    : CObject(parent)
+    , m_fd(fd)
     , m_event_mask(event_mask)
 {
     set_enabled(true);

+ 1 - 1
Libraries/LibCore/CNotifier.h

@@ -12,7 +12,7 @@ public:
         Write = 2,
         Exceptional = 4,
     };
-    CNotifier(int fd, unsigned event_mask);
+    CNotifier(int fd, unsigned event_mask, CObject* parent = nullptr);
     virtual ~CNotifier() override;
 
     void set_enabled(bool);

+ 2 - 2
Libraries/LibCore/CSocket.cpp

@@ -68,7 +68,7 @@ bool CSocket::connect(const CSocketAddress& address, int port)
     if (rc < 0) {
         if (errno == EINPROGRESS) {
             dbg() << *this << " connection in progress (EINPROGRESS)";
-            m_notifier = make<CNotifier>(fd(), CNotifier::Event::Write);
+            m_notifier = make<CNotifier>(fd(), CNotifier::Event::Write, this);
             m_notifier->on_ready_to_write = [this] {
                 dbg() << *this << " connected!";
                 m_connected = true;
@@ -138,7 +138,7 @@ void CSocket::did_update_fd(int fd)
         m_read_notifier = nullptr;
         return;
     }
-    m_read_notifier = make<CNotifier>(fd, CNotifier::Event::Read);
+    m_read_notifier = make<CNotifier>(fd, CNotifier::Event::Read, this);
     m_read_notifier->on_ready_to_read = [this] {
         if (on_ready_to_read)
             on_ready_to_read();