]> git.llucax.com Git - software/libev.git/commitdiff
multiplicity, work around bugs in http.c etc.
authorroot <root>
Sun, 4 Nov 2007 00:39:24 +0000 (00:39 +0000)
committerroot <root>
Sun, 4 Nov 2007 00:39:24 +0000 (00:39 +0000)
ev.c
ev_epoll.c

diff --git a/ev.c b/ev.c
index 300049ed493c9a2111094cc7bf7d31376315db5a..a80e69a101699ee2f7da8521005c1c6bfcf1aa0c 100644 (file)
--- a/ev.c
+++ b/ev.c
@@ -132,7 +132,7 @@ typedef struct
   int events;
 } ANPENDING;
 
-#ifdef EV_MULTIPLICITY
+#if EV_MULTIPLICITY
 
 struct ev_loop
 {
@@ -544,7 +544,7 @@ ev_method (EV_P)
   return method;
 }
 
-static void
+inline int
 loop_init (EV_P_ int methods)
 {
   if (!method)
@@ -603,16 +603,19 @@ loop_init (EV_P_ int methods)
   return method;
 }
 
-#ifdef EV_MULTIPLICITY
+#if EV_MULTIPLICITY
 
 struct ev_loop *
 ev_loop_new (int methods)
 {
   struct ev_loop *loop = (struct ev_loop *)calloc (1, sizeof (struct ev_loop));
 
-  loop_init (EV_A_ methods);
+  if (loop_init (EV_A_ methods))
+    return loop;
 
-  return loop;
+  ev_loop_delete (loop);
+
+  return 0;
 }
 
 void
@@ -627,7 +630,7 @@ ev_loop_delete (EV_P)
 int
 ev_init (int methods)
 {
-  loop_init ();
+  return loop_init (methods);
 }
 
 #endif
index 30d1b257f96616f6e72c7d3bfa111a2c7d8bcb62..4afad188aafc52bf7311d6e2b6ab0f007600d4c7 100644 (file)
@@ -62,7 +62,7 @@ epoll_postfork_child (EV_P)
 static void
 epoll_poll (EV_P_ ev_tstamp timeout)
 {
-  int eventcnt = epoll_wait (epoll_fd, events, eventmax, ceil (timeout * 1000.));
+  int eventcnt = epoll_wait (epoll_fd, epoll_events, epoll_eventmax, ceil (timeout * 1000.));
   int i;
 
   if (eventcnt < 0)
@@ -71,17 +71,17 @@ epoll_poll (EV_P_ ev_tstamp timeout)
   for (i = 0; i < eventcnt; ++i)
     fd_event (
       EV_A_
-      events [i].data.u64,
-      (events [i].events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0)
-      | (events [i].events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0)
+      epoll_events [i].data.u64,
+      (epoll_events [i].events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0)
+      | (epoll_events [i].events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0)
     );
 
   /* if the receive array was full, increase its size */
-  if (expect_false (eventcnt == eventmax))
+  if (expect_false (eventcnt == epoll_eventmax))
     {
-      free (events);
-      eventmax = array_roundsize (events, eventmax << 1);
-      events = malloc (sizeof (struct epoll_event) * eventmax);
+      free (epoll_events);
+      epoll_eventmax = array_roundsize (epoll_events, epoll_eventmax << 1);
+      epoll_events = malloc (sizeof (struct epoll_event) * epoll_eventmax);
     }
 }
 
@@ -99,8 +99,8 @@ epoll_init (EV_P_ int flags)
   method_modify = epoll_modify;
   method_poll   = epoll_poll;
 
-  eventmax = 64; /* intiial number of events receivable per poll */
-  events = malloc (sizeof (struct epoll_event) * eventmax);
+  epoll_eventmax = 64; /* intiial number of events receivable per poll */
+  epoll_events = malloc (sizeof (struct epoll_event) * epoll_eventmax);
 
   return EVMETHOD_EPOLL;
 }