On Fri, Apr 26, 2013 at 10:47:22AM +0800, Liu Ping Fan wrote: > +GPollFD *events_source_add_gfd(EventsGSource *src, int fd) > +{ > + GPollFD *retfd; > + > + retfd = g_slice_alloc(sizeof(GPollFD)); > + retfd->events = 0; > + retfd->fd = fd; > + src->pollfds_list = g_list_append(src->pollfds_list, retfd); > + if (fd > 0) {
0 (stdin) is a valid fd number. Maybe just assert(fd >= 0)? > +static gboolean events_source_check(GSource *src) > +{ > + EventsGSource *nsrc = (EventsGSource *)src; > + GList *cur; > + GPollFD *gfd; > + > + cur = nsrc->pollfds_list; > + while (cur) { > + gfd = cur->data; > + if (gfd->fd > 0 && (gfd->revents & gfd->events)) { revents will always be 0 if fd is invalid, since we didn't call g_source_add_poll(). Is there a reason to perform the fd > 0 check again? > +void events_source_release(EventsGSource *src) > +{ assert that pollfds_list is empty? We don't g_slice_free() GPollFDs so it must be empty here.