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.

Reply via email to