Fix more IAuth bugs and add IAUTH log target.
[ircu2.10.12-pk.git] / ircd / engine_epoll.c
index ffee6717f033e11b9dee79c4a6b7298d3f485fde..3fdfecf893e120b06a66408d92add8e595a363cb 100644 (file)
@@ -29,7 +29,7 @@
 #include "ircd_log.h"
 #include "s_debug.h"
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
 #include <errno.h>
 #include <sys/types.h>
 #ifdef HAVE_STDINT_H
@@ -212,15 +212,10 @@ engine_set_events(struct Socket *sock, unsigned new_events)
 static void
 engine_delete(struct Socket *sock)
 {
-  struct epoll_event evt;
-
   assert(0 != sock);
-  memset(&evt, 0, sizeof(evt));
   Debug((DEBUG_ENGINE, "epoll: Deleting socket %d [%p], state %s",
         s_fd(sock), sock, state_to_name(s_state(sock))));
-  if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, s_fd(sock), &evt) < 0)
-    log_write(LS_SOCKET, L_WARNING, 0,
-              "Unable to delete epoll item for socket %d", s_fd(sock));
+  /* No action necessary; epoll removes the socket on close(). */
 }
 
 /** Run engine event loop.
@@ -231,7 +226,7 @@ engine_loop(struct Generators *gen)
 {
   struct epoll_event *events;
   struct Socket *sock;
-  size_t codesize;
+  socklen_t codesize;
   int events_count, i, wait, nevs, errcode;
 
   if ((events_count = feature_int(FEAT_POLLS_PER_LOOP)) < 20)
@@ -281,9 +276,9 @@ engine_loop(struct Generators *gen)
           gen_ref_dec(sock);
           continue;
         }
-      }
-
-      switch (s_state(sock)) {
+      } else if (events[i].events & EPOLLHUP) {
+        event_generate(ET_EOF, sock, 0);
+      } else switch (s_state(sock)) {
       case SS_CONNECTING:
         if (events[i].events & EPOLLOUT) /* connection completed */
           event_generate(ET_CONNECT, sock, 0);
@@ -296,12 +291,6 @@ engine_loop(struct Generators *gen)
 
       case SS_NOTSOCK:
       case SS_CONNECTED:
-        if (events[i].events & EPOLLIN)
-          event_generate((events[i].events & EPOLLHUP) ? ET_EOF : ET_READ, sock, 0);
-        if (events[i].events & EPOLLOUT)
-          event_generate(ET_WRITE, sock, 0);
-        break;
-
       case SS_DATAGRAM:
       case SS_CONNECTDG:
         if (events[i].events & EPOLLIN)
@@ -314,9 +303,10 @@ engine_loop(struct Generators *gen)
     }
     timer_run();
   }
+  MyFree(events);
 }
 
-/** Descriptor for dpoll event engine. */
+/** Descriptor for epoll event engine. */
 struct Engine engine_epoll = {
   "epoll()",
   engine_init,