From df18d66319182c66735334bb252a07eb7277aa8b Mon Sep 17 00:00:00 2001 From: "roberto@solarisexpress" Date: Sat, 5 Feb 2011 22:29:54 +0000 Subject: [PATCH] various solaris fixes --- event.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ uwsgi.h | 11 ++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/event.c b/event.c index 11db9fd0..a8fd8e71 100644 --- a/event.c +++ b/event.c @@ -18,6 +18,26 @@ int event_queue_init() { return port; } +int event_queue_del_fd(int eq, int fd) { + + if (port_dissociate(eq, PORT_SOURCE_FD, fd)) { + uwsgi_error("port_disassociate"); + return -1; + } + + return fd; +} + + +int event_queue_interesting_fd_has_error(void *events, int id) { + port_event_t *pe = (port_event_t *) events; + if (pe[id].portev_events == POLLHUP || pe[id].portev_events == POLLERR) { + return 1; + } + return 0; +} + + int event_queue_add_fd_read(int eq, int fd) { @@ -39,6 +59,59 @@ int event_queue_add_fd_write(int eq, int fd) { return fd; } +void *event_queue_alloc(int nevents) { + + return uwsgi_malloc(sizeof(port_event_t) * nevents); +} + +int event_queue_interesting_fd(void *events, int id) { + port_event_t *pe = (port_event_t *) events; + if (pe[id].portev_source == PORT_SOURCE_FILE || pe[id].portev_source == PORT_SOURCE_TIMER) { + return (int) pe[id].portev_user; + } + + return (int) pe[id].portev_object; +} + +int event_queue_wait_multi(int eq, int timeout, void *events, int nevents) { + + int ret; + uint_t nget; + int i; + timespec_t ts; + port_event_t *pe; + + if (timeout > 0) { + ts.tv_sec = timeout; + ts.tv_nsec = 0; + ret = port_getn(eq, events, nevents, &nget, &ts); + } + else { + ret = port_getn(eq, events, nevents, &nget, NULL); + } + + if (ret < 0) { + if (errno != ETIME) { + uwsgi_error("port_getn()"); + return -1; + } + return 0; + } + + pe = (port_event_t *) events; + for(i=0;i #include #include +#include + +#ifdef __sun__ +#define _XPG4_2 +#define __EXTENSIONS__ +#endif + #include #include #include -#include #include #include @@ -173,6 +179,9 @@ extern int pivot_root(const char * new_root, const char * put_old); #endif #undef _XOPEN_SOURCE +#ifdef __sun__ +#undef __EXTENSIONS__ +#endif /* this value are taken from nginx */ #if defined(__APPLE__) || defined(__freebsd__)