ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev_kqueue.c
(Generate patch)

Comparing libev/ev_kqueue.c (file contents):
Revision 1.1 by root, Fri Nov 2 20:59:15 2007 UTC vs.
Revision 1.2 by root, Fri Nov 2 21:17:30 2007 UTC

127} 127}
128 128
129static void 129static void
130kqueue_init (struct event_base *base) 130kqueue_init (struct event_base *base)
131{ 131{
132 struct kevent ch, ev;
133
132 /* Initalize the kernel queue */ 134 /* Initalize the kernel queue */
133 if ((kq_fd = kqueue ()) == -1) 135 if ((kq_fd = kqueue ()) < 0)
134 {
135 free (kqueueop);
136 return;
137 }
138
139 /* Initalize fields */
140 kq_changes = malloc (NEVENT * sizeof (struct kevent));
141 if (!kq_changes)
142 return; 136 return;
143 137
144 events = malloc (NEVENT * sizeof (struct kevent)); 138 /* Check for Mac OS X kqueue bug. */
145 if (!events) 139 ch.ident = -1;
146 { 140 ch.filter = EVFILT_READ;
147 free (kq_changes); 141 ch.flags = EV_ADD;
148 return;
149 }
150 142
151 /* Check for Mac OS X kqueue bug. */
152 kq_changes [0].ident = -1;
153 kq_changes [0].filter = EVFILT_READ;
154 kq_changes [0].flags = EV_ADD;
155 /* 143 /*
156 * If kqueue works, then kevent will succeed, and it will 144 * If kqueue works, then kevent will succeed, and it will
157 * stick an error in events[0]. If kqueue is broken, then 145 * stick an error in events[0]. If kqueue is broken, then
158 * kevent will fail. 146 * kevent will fail.
159 */ 147 */
160 if (kevent (kq_fd, kq_changes, 1, kq_events, NEVENT, NULL) != 1 148 if (kevent (kq_fd, &ch, 1, &ev, 1, 0) != 1
161 || kq_events[0].ident != -1 149 || ev.ident != -1
162 || kq_events[0].flags != EV_ERROR) 150 || ev.flags != EV_ERROR)
163 { 151 {
164 /* detected broken kqueue */ 152 /* detected broken kqueue */
165 free (kq_changes);
166 free (kq_events);
167 close (kq_fd); 153 close (kq_fd);
168 return; 154 return;
169 } 155 }
170 156
171 ev_method = EVMETHOD_KQUEUE; 157 ev_method = EVMETHOD_KQUEUE;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines