Use full buffer size in read(2) call, there is no need to preserve the

last byte of the buffer.

Since we call refresh_device_tbl() for any devctl event types - no need
to check the first byte of buffer. Remove these checks.

Also remove logging for the case of unknown devd message. It incorrectly
triggers when all devctl events are not fit into one buffer and part of
unread data will be read in the next pass.

When length of data readed from devctl is equal to sizeof(buf), then try
to read from socket again, to read full data.

MFC after:	2 weeks
This commit is contained in:
Andrey V. Elsukov 2011-07-11 12:51:35 +00:00
parent 608be0d0ba
commit 8f64015c0e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=223933

View File

@ -449,7 +449,8 @@ devd_socket_callback(int fd, void *arg __unused)
HRDBG("called");
read_len = read(fd, buf, sizeof(buf) - 1);
again:
read_len = read(fd, buf, sizeof(buf));
if (read_len < 0) {
if (errno == EBADF) {
devd_sock = -1;
@ -476,16 +477,9 @@ devd_socket_callback(int fd, void *arg __unused)
syslog(LOG_ERR, "Closing devd_fd, revert to devinfo polling");
} else {
switch (buf[0]) {
case '+':
case '-':
case '?':
case '!':
refresh_device_tbl(1);
return;
default:
syslog(LOG_ERR, "unknown message from devd socket");
}
if (read_len == sizeof(buf))
goto again;
refresh_device_tbl(1);
}
}