src/server/daemon/event_bsd.c

branch
webdav
changeset 263
533f9097d712
parent 260
4779a6fb4fbe
child 264
81f202caea5b
equal deleted inserted replaced
262:c459019a3ed3 263:533f9097d712
80 } 80 }
81 81
82 numchanges = 0; 82 numchanges = 0;
83 for(int i=0;i<nev;i++) { 83 for(int i=0;i<nev;i++) {
84 Event *event = (Event*)events[i].udata; 84 Event *event = (Event*)events[i].udata;
85 if(!event) {
86 log_ereport(LOG_WARN, "Unknown kevent (ident=%d)", (int)events[i].ident);
87 continue;
88 }
89
85 if(event->fn) { 90 if(event->fn) {
86 int ep = event->events; 91 u_short kev_flag = 0;
87 if(event->fn(ev, event)) { 92 int saved_ev = event->events;
88 if(event->events != ep) { 93 if(!event->fn(ev, event)) {
89 changes[numchanges++].filter = ev_convert2sys_events(ep); 94 // ret 0 => remove event
95 kev_flag = EV_DELETE;
96
97 if(event->finish) {
98 event->finish(ev, event);
90 } 99 }
91 } else if(event->finish) { 100 } else if(saved_ev != event->events) {
92 changes[numchanges++].filter = ev_convert2sys_events(ep); 101 // events changed
93 event->finish(ev, event); 102 kev_flag = EV_ADD;
103 events[i].filter = ev_convert2sys_events(event->events);
104 }
105
106 if(kev_flag) {
107 // copy current event to changelist
108 changes[numchanges] = events[i];
109 changes[numchanges].flags = kev_flag;
110 numchanges++;
94 } 111 }
95 } 112 }
96 } 113 }
97 } 114 }
98 } 115 }

mercurial