if (h->fd != g_io_channel_unix_get_fd(source))
return TRUE;
+ if (condition & (G_IO_ERR | G_IO_HUP))
+ _E("GIOChannel receives G_IO_ERR|G_IO_HUP fd = %d condition = %d", h->fd, condition);
- if (condition & G_IO_ERR)
- _E("udev_monitor_set_receive_buffer_size overflow.");
-
- if (!(condition & G_IO_IN)) {
- _D("udev have a bad behavior.");
- return TRUE;
+ if (!(condition & G_IO_IN) && (condition & (G_IO_ERR | G_IO_HUP))) {
+ remove_fd_read_handler((fd_handler_h *)&h);
+ return FALSE;
}
ret = true;
return -ENOMEM;
}
- id = g_io_add_watch(ch, G_IO_IN | G_IO_ERR,
+ id = g_io_add_watch(ch, G_IO_IN | G_IO_ERR | G_IO_HUP,
channel_changed, h);
if (id == 0) {
_E("Failed to add watch for GIOChannel.");