src/server/daemon/event_bsd.c

changeset 531
9b15b1f72bef
parent 529
cd606400f0ba
child 537
ad44e72fbf50
equal deleted inserted replaced
530:1e117b5d6710 531:9b15b1f72bef
32 #include "../util/atomic.h" 32 #include "../util/atomic.h"
33 #include "../util/io.h" 33 #include "../util/io.h"
34 34
35 #include "event_bsd.h" 35 #include "event_bsd.h"
36 36
37 #include "httprequest.h"
38
37 EVHandler* evhandler_create(EventHandlerConfig *cfg) { 39 EVHandler* evhandler_create(EventHandlerConfig *cfg) {
38 EVHandler *ev = malloc(sizeof(EVHandler)); 40 EVHandler *ev = malloc(sizeof(EVHandler));
39 ev->current = 0; 41 ev->current = 0;
40 ev->instances = calloc(cfg->nthreads, sizeof(void*)); 42 ev->instances = calloc(cfg->nthreads, sizeof(void*));
41 ev->numins = cfg->nthreads; 43 ev->numins = cfg->nthreads;
60 62
61 return ev; 63 return ev;
62 } 64 }
63 65
64 66
65 #define EV_MAX_EVENTS 32
66
67 void ev_handle_events(EventHandler *ev) { 67 void ev_handle_events(EventHandler *ev) {
68 struct timespec timeout; 68 struct timespec timeout;
69 timeout.tv_nsec = 0; 69 timeout.tv_nsec = 0;
70 timeout.tv_sec = 600; 70 timeout.tv_sec = 600;
71 71
83 continue; 83 continue;
84 } 84 }
85 85
86 numchanges = 0; 86 numchanges = 0;
87 int numfinished = 0; 87 int numfinished = 0;
88 ev->numret = 0;
88 for(int i=0;i<nev;i++) { 89 for(int i=0;i<nev;i++) {
89 Event *event = (Event*)events[i].udata; 90 Event *event = (Event*)events[i].udata;
90 if(!event) { 91 if(!event) {
91 if(events[i].flags == 0) { 92 if(events[i].flags == 0) {
92 log_ereport(LOG_WARN, "Unknown kevent (ident=%d)", (int)events[i].ident); 93 log_ereport(LOG_WARN, "Unknown kevent (ident=%d)", (int)events[i].ident);
142 // call event finish handlers 143 // call event finish handlers
143 for(int i=0;i<numfinished;i++) { 144 for(int i=0;i<numfinished;i++) {
144 Event *event = finished[i]; 145 Event *event = finished[i];
145 finished[i]->finish(ev, event); 146 finished[i]->finish(ev, event);
146 } 147 }
148 // execute return calls
149 for(int i=0;i<ev->numret;i++) {
150 EVReturn ret = ev->fnreturn[i];
151 nsapi_saf_return(ret.sn, ret.rq, ret.ret);
152 }
147 } 153 }
148 } 154 }
149 155
150 int ev_pollin(EventHandler *h, int fd, Event *event) { 156 int ev_pollin(EventHandler *h, int fd, Event *event) {
151 event->events = EVENT_POLLIN; 157 event->events = EVENT_POLLIN;
204 } 210 }
205 211
206 int event_removepoll(EventHandler *ev, SYS_NETFD fd) { 212 int event_removepoll(EventHandler *ev, SYS_NETFD fd) {
207 return ((IOStream*)fd)->poll(fd, ev, IO_POLL_NONE, NULL); 213 return ((IOStream*)fd)->poll(fd, ev, IO_POLL_NONE, NULL);
208 } 214 }
215
216
217 void ev_saf_return(EventHandler *h, Session *sn, Request *rq, int ret) {
218 h->fnreturn[h->numret++] = (EVReturn){ sn, rq, ret };
219 }

mercurial