101 } |
101 } |
102 |
102 |
103 for(int i=0;i<nev;i++) { |
103 for(int i=0;i<nev;i++) { |
104 event_t *event = events[i].portev_user; |
104 event_t *event = events[i].portev_user; |
105 if(event->fn) { |
105 if(event->fn) { |
106 event->fn(ev, event); |
106 if(event->fn(ev, event)) { |
|
107 /* |
|
108 * on solaris we have to reassociate the fd after |
|
109 * each event |
|
110 * we do this if the event function returns 1 |
|
111 */ |
|
112 if(ev_poll(ev, event)) { |
|
113 perror("port_associate"); |
|
114 } |
|
115 } |
107 } |
116 } |
108 } |
117 } |
109 } |
118 } |
110 } |
119 } |
111 |
120 |
122 return h->ports[cp]; |
131 return h->ports[cp]; |
123 } |
132 } |
124 |
133 |
125 int ev_pollin(event_handler_t *h, int fd, event_t *event) { |
134 int ev_pollin(event_handler_t *h, int fd, event_t *event) { |
126 event->object = (intptr_t)fd; |
135 event->object = (intptr_t)fd; |
|
136 event->events = POLLIN; |
127 return port_associate( |
137 return port_associate( |
128 ev_get_port(h), |
138 ev_get_port(h), |
129 PORT_SOURCE_FD, |
139 PORT_SOURCE_FD, |
130 (uintptr_t)fd, |
140 (uintptr_t)fd, |
131 POLLIN, |
141 POLLIN, |
132 event); |
142 event); |
133 } |
143 } |
134 |
144 |
135 int ev_pollout(event_handler_t *h, int fd, event_t *event) { |
145 int ev_pollout(event_handler_t *h, int fd, event_t *event) { |
136 event->object = (intptr_t)fd; |
146 event->object = (intptr_t)fd; |
|
147 event->events = POLLOUT; |
137 return port_associate( |
148 return port_associate( |
138 ev_get_port(h), |
149 ev_get_port(h), |
139 PORT_SOURCE_FD, |
150 PORT_SOURCE_FD, |
140 (uintptr_t)fd, |
151 (uintptr_t)fd, |
141 POLLOUT, |
152 POLLOUT, |
142 event); |
153 event); |
143 } |
154 } |
144 |
155 |
|
156 int ev_poll(event_handler_t *h, event_t *event) { |
|
157 return port_associate( |
|
158 ev_get_port(h), |
|
159 PORT_SOURCE_FD, |
|
160 event->object, |
|
161 event->events, |
|
162 event); |
|
163 } |
|
164 |
145 int evt_send(event_handler_t *h, event_t *event) { |
165 int evt_send(event_handler_t *h, event_t *event) { |
146 event->object = 0; |
166 event->object = 0; |
147 return port_send(ev_get_port(h), 0, event); |
167 return port_send(ev_get_port(h), 0, event); |
148 } |
168 } |