diff --git a/src/umockdev-record.vala b/src/umockdev-record.vala index 8452b6362a9c92c660d3deb065fc2bf9af99dae3..a02c626ca17f51a59a95005252215836cab46872 100644 --- a/src/umockdev-record.vala +++ b/src/umockdev-record.vala @@ -216,12 +216,18 @@ print_device_attributes(string devpath, string subdir) continue; } - ssize_t contents_len = Posix.read(fd, contents, contents.length - 1); - if (contents_len >= 0) { - contents[contents_len] = 0; - write_attr(attr_name, contents, (int) contents_len); - } else { - debug("Cannot read %s, ignoring: %s", attr_path, strerror(errno)); + // trying to read some attributes hangs forever even with O_NONBLOCK, so check if there's anything + Posix.fd_set read_fds; + Posix.FD_ZERO(out read_fds); + Posix.FD_SET(fd, ref read_fds); + if (Posix.select(fd + 1, &read_fds, null, null, {0, 0}) > 0) { + ssize_t contents_len = Posix.read(fd, contents, contents.length - 1); + if (contents_len >= 0) { + contents[contents_len] = 0; + write_attr(attr_name, contents, (int) contents_len); + } else { + debug("Cannot read %s, ignoring: %s", attr_path, strerror(errno)); + } } Posix.close(fd);