]> granicus.if.org Git - libevent/commitdiff
constify; some windows stuff by mike davis; fix a poll bug
authorNiels Provos <provos@gmail.com>
Thu, 25 Sep 2003 03:26:53 +0000 (03:26 +0000)
committerNiels Provos <provos@gmail.com>
Thu, 25 Sep 2003 03:26:53 +0000 (03:26 +0000)
svn:r77

event.c
event.h
kqueue.c
poll.c
select.c

diff --git a/event.c b/event.c
index e5c8cc1903d5dba2ece21e1f090e7b70b16d6134..b3d4a9f142ecb9ee8b94bc8fd3f78986265c77bd 100644 (file)
--- a/event.c
+++ b/event.c
 #include "event.h"
 
 #ifdef HAVE_SELECT
-extern struct eventop selectops;
+extern const struct eventop selectops;
 #endif
 #ifdef HAVE_POLL
-extern struct eventop pollops;
+extern const struct eventop pollops;
+#endif
+#ifdef HAVE_RTSIG
+extern const struct eventop rtsigops;
 #endif
 #ifdef HAVE_EPOLL
-extern struct eventop epollops;
+extern const struct eventop epollops;
 #endif
 #ifdef HAVE_WORKING_KQUEUE
-extern struct eventop kqops;
+extern const struct eventop kqops;
 #endif
 #ifdef WIN32
-extern struct eventop win32ops;
+extern const struct eventop win32ops;
 #endif
 
 /* In order of preference */
-struct eventop *eventops[] = {
+const struct eventop *eventops[] = {
 #ifdef HAVE_WORKING_KQUEUE
        &kqops,
 #endif
 #ifdef HAVE_EPOLL
        &epollops,
 #endif
+#ifdef HAVE_RTSIG
+       &rtsigops,
+#endif
 #ifdef HAVE_POLL
        &pollops,
 #endif
@@ -102,7 +108,7 @@ struct eventop *eventops[] = {
        NULL
 };
 
-struct eventop *evsel;
+const struct eventop *evsel;
 void *evbase;
 
 /* Handle signals */
diff --git a/event.h b/event.h
index d2991c6c3696b84b317027c86d8fa9f3f07f6e87..5daa23f695e8c75905ba64d6c47d2fb74966a8b8 100644 (file)
--- a/event.h
+++ b/event.h
 extern "C" {
 #endif
 
+#ifdef WIN32
+#include <windows.h>
+#endif
+
 #define EVLIST_TIMEOUT 0x01
 #define EVLIST_INSERTED        0x02
 #define EVLIST_SIGNAL  0x04
@@ -77,7 +81,12 @@ struct event {
        TAILQ_ENTRY (event) ev_signal_next;
        RB_ENTRY (event) ev_timeout_node;
 
+#ifdef WIN32
+       HANDLE ev_fd;
+       OVERLAPPED overlap;
+#else
        int ev_fd;
+#endif
        short ev_events;
        short ev_ncalls;
        short *ev_pncalls;      /* Allows deletes in callback */
@@ -91,8 +100,8 @@ struct event {
        int ev_flags;
 };
 
-#define EVENT_SIGNAL(ev)       ev->ev_fd
-#define EVENT_FD(ev)           ev->ev_fd
+#define EVENT_SIGNAL(ev)       (int)ev->ev_fd
+#define EVENT_FD(ev)           (int)ev->ev_fd
 
 #ifdef _EVENT_DEFINED_TQENTRY
 #undef TAILQ_ENTRY
@@ -153,7 +162,11 @@ void event_active(struct event *, int, short);
 
 int event_pending(struct event *, short, struct timeval *);
 
+#ifdef WIN32
+#define event_initialized(ev)          ((ev)->ev_flags & EVLIST_INIT && (ev)->ev_fd != INVALID_HANDLE_VALUE)
+#else
 #define event_initialized(ev)          ((ev)->ev_flags & EVLIST_INIT)
+#endif
 
 #ifdef __cplusplus
 }
index 2b00b4c17287dfbee0b85268295a96f44b011fda..103715ff498531fcd00027fa8b421feba0aeed0d 100644 (file)
--- a/kqueue.c
+++ b/kqueue.c
@@ -90,7 +90,7 @@ int kq_recalc (void *, int);
 int kq_dispatch        (void *, struct timeval *);
 int kq_insert  (struct kqop *, struct kevent *);
 
-struct eventop kqops = {
+const struct eventop kqops = {
        "kqueue",
        kq_init,
        kq_add,
diff --git a/poll.c b/poll.c
index 4806fc2b70857b4834f1116e191d1d5784bb6f22..385023c9f44ea36947b02bf11ab950db59c29ebe 100644 (file)
--- a/poll.c
+++ b/poll.c
@@ -193,6 +193,9 @@ poll_dispatch(void *arg, struct timeval *tv)
 
        for (i = 0; i < nfds; i++) {
                res = 0;
+               /* If the file gets closed notify */
+               if (pop->event_set[i].revents & POLLHUP)
+                       pop->event_set[i].revents = POLLIN|POLLOUT;
                if (pop->event_set[i].revents & POLLIN)
                        res = EV_READ;
                else if (pop->event_set[i].revents & POLLOUT)
index 870852bd3451120164ad9df467572b7f7d3109b9..77fdb0505d56d37717da09b4911a874f4789b8bc 100644 (file)
--- a/select.c
+++ b/select.c
@@ -80,7 +80,7 @@ int select_del                (void *, struct event *);
 int select_recalc      (void *, int);
 int select_dispatch    (void *, struct timeval *);
 
-struct eventop selectops = {
+const struct eventop selectops = {
        "select",
        select_init,
        select_add,