]> git.saurik.com Git - wxWidgets.git/commitdiff
changed wxFDIODispatcher::UnregisterFD() to take only fd, without flags, and unregist...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 14 Jul 2007 19:41:46 +0000 (19:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 14 Jul 2007 19:41:46 +0000 (19:41 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47469 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/private/fdiodispatcher.h
include/wx/private/selectdispatcher.h
include/wx/unix/private/epolldispatcher.h
src/common/fdiodispatcher.cpp
src/common/gsocketiohandler.cpp
src/common/selectdispatcher.cpp
src/unix/epolldispatcher.cpp

index 0f71d94fd67dcc4c3328aa5803bba850e20f3e3c..40e9982e23499b7cba0ac4805b8307dab558d23f 100644 (file)
@@ -52,10 +52,8 @@ public:
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags) = 0;
 
-    // unregister descriptor previously registered with RegisterFD(), the
-    // caller is responsible for deleting the returned handler pointer if
-    // necessary
-    virtual bool UnregisterFD(int fd, int flags) = 0;
+    // unregister descriptor previously registered with RegisterFD()
+    virtual bool UnregisterFD(int fd) = 0;
 
     // loops waiting for an event to happen on any of the descriptors
     virtual void RunLoop(int timeout) = 0;
@@ -94,10 +92,12 @@ WX_DECLARE_HASH_MAP(
 //
 // notice that all functions for FD management have implementation
 // in the base class and should be called from the derived classes
-class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public wxFDIODispatcher {
+class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public wxFDIODispatcher
+{
 public:
     // find the handler for the given fd, return NULL if none
     wxFDIOHandler *FindHandler(int fd) const;
+
     // register handler for the given descriptor with the dispatcher, return
     // true on success or false on error
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags);
@@ -105,10 +105,8 @@ public:
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags);
 
-    // unregister descriptor previously registered with RegisterFD(), the
-    // caller is responsible for deleting the returned handler pointer if
-    // necessary
-    virtual bool UnregisterFD(int fd, int flags);
+    // unregister descriptor previously registered with RegisterFD()
+    virtual bool UnregisterFD(int fd);
 
     virtual ~wxMappedFDIODispatcher() { }
 
index 130f85bd3f66dda9e2f1b0c8218de6263c02c10a..fac5f228447a9d0ca890d7427105d46f05b23b43 100644 (file)
@@ -38,9 +38,9 @@ public:
 
     // same as SetFD() except it unsets the bits set in the flags for the given
     // fd
-    bool ClearFD(int fd, int flags)
+    bool ClearFD(int fd)
     {
-        return SetFD(fd, wxFDIO_ALL & ~flags);
+        return SetFD(fd, 0);
     }
 
 
@@ -88,7 +88,7 @@ public:
     // implement pure virtual methods of the base class
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
-    virtual bool UnregisterFD(int fd, int flags = wxFDIO_ALL);
+    virtual bool UnregisterFD(int fd);
     virtual void RunLoop(int timeout = TIMEOUT_INFINITE);
 
 protected:
index c4b50744722d0e767eb8e4f77095771dd6b5ad68..735ab6d72cd0019598f59d1996474ba52fbf573b 100644 (file)
@@ -29,7 +29,7 @@ public:
     // implement base class pure virtual methods
     virtual bool RegisterFD(int fd, wxFDIOHandler* handler, int flags = wxFDIO_ALL);
     virtual bool ModifyFD(int fd, wxFDIOHandler* handler, int flags = wxFDIO_ALL);
-    virtual bool UnregisterFD(int fd, int flags = wxFDIO_ALL);
+    virtual bool UnregisterFD(int fd);
     virtual void RunLoop(int timeout = TIMEOUT_INFINITE);
 
 private:
index f2e54e3036d10f8fcd5e22d014d72fc8fff39897..112f892dc29a71de032e4f0199e233fd1ddc37f0 100644 (file)
@@ -78,18 +78,13 @@ bool wxMappedFDIODispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
     return true;
 }
 
-bool wxMappedFDIODispatcher::UnregisterFD(int fd, int flags)
+bool wxMappedFDIODispatcher::UnregisterFD(int fd)
 {
     wxFDIOHandlerMap::iterator i = m_handlers.find(fd);
-    if( i == m_handlers.end())
+    if ( i == m_handlers.end() )
       return false;
 
-    i->second.flags &= ~flags;
-    if ( !i->second.flags )
-    {
-        // this handler is not registered for anything any more, get rid of it
-        m_handlers.erase(i);
-    }
+    m_handlers.erase(i);
 
     return true;
 }
index e8e6dfcd62a0995e9c25f9ce694cd16780f91804..a5ae3e476d1364338e03f7606eee65e4917b4f1e 100644 (file)
@@ -180,13 +180,24 @@ void GSocketGUIFunctionsTableConcrete::Uninstall_Callback(GSocket *socket,
       return;
 
   wxGSocketIOHandler * const
-      handler = (wxGSocketIOHandler*)dispatcher->UnregisterFD(fd, flag);
+      handler = wx_static_cast(wxGSocketIOHandler *, dispatcher->FindHandler(fd));
   if ( handler )
   {
       handler->RemoveFlag(flag);
 
       if ( !handler->GetFlags() )
+      {
+          dispatcher->UnregisterFD(fd);
           delete handler;
+      }
+      else
+      {
+          dispatcher->ModifyFD(fd, handler, handler->GetFlags());
+      }
+  }
+  else
+  {
+      dispatcher->UnregisterFD(fd);
   }
 }
 
index ef8b95179c4856ed7dad6aa6a6b6b4d62185dd90..02c95710b73c817be73bb1bcd2c0646ddc174e18 100644 (file)
@@ -184,9 +184,12 @@ bool wxSelectDispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
     return m_sets.SetFD(fd, flags);
 }
 
-bool wxSelectDispatcher::UnregisterFD(int fd, int flags)
+bool wxSelectDispatcher::UnregisterFD(int fd)
 {
-    m_sets.ClearFD(fd, flags);
+    m_sets.ClearFD(fd);
+
+    if ( !wxMappedFDIODispatcher::UnregisterFD(fd) )
+        return false;
 
     // remove the handler if we don't need it any more
     if ( !m_sets.HasFD(fd) )
index 382cd5473c8f5f7ab13a5d26ab2254e7a8c295ce..9f8505cae7fd7bb1fe6a0d9a57f8f5b5114cd4f2 100644 (file)
@@ -120,7 +120,7 @@ bool wxEpollDispatcher::ModifyFD(int fd, wxFDIOHandler* handler, int flags)
     return true;
 }
 
-bool wxEpollDispatcher::UnregisterFD(int fd, int flags)
+bool wxEpollDispatcher::UnregisterFD(int fd)
 {
     epoll_event ev;
     ev.events = 0;