summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2007-11-04 00:39:24 +0000
committerroot <root>2007-11-04 00:39:24 +0000
commit3676840bf4d472af68b38be10c47665d4bc451cf (patch)
tree393b74be7a54f41755411a22bc601ef86f9d7fdd
parent678c8c54d0ce967d8f1db3e575aed61879279975 (diff)
multiplicity, work around bugs in http.c etc.
-rw-r--r--ev.c15
-rw-r--r--ev_epoll.c20
2 files changed, 19 insertions, 16 deletions
diff --git a/ev.c b/ev.c
index 300049e..a80e69a 100644
--- 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
diff --git a/ev_epoll.c b/ev_epoll.c
index 30d1b25..4afad18 100644
--- a/ev_epoll.c
+++ b/ev_epoll.c
@@ -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;
}