Call poll() only when it's needed in fd_{read,write}_all()
This commit is contained in:
20
glorytun.c
20
glorytun.c
@@ -269,15 +269,17 @@ static ssize_t fd_read_all (int fd, void *data, size_t size)
|
|||||||
};
|
};
|
||||||
|
|
||||||
while (done<size) {
|
while (done<size) {
|
||||||
poll(&pollfd, 1, -1);
|
|
||||||
|
|
||||||
ssize_t ret = fd_read(fd, data+done, size-done);
|
ssize_t ret = fd_read(fd, data+done, size-done);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (ret>0)
|
if (ret<0) {
|
||||||
done += ret;
|
poll(&pollfd, 1, -1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
done += ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
@@ -293,15 +295,17 @@ static ssize_t fd_write_all (int fd, const void *data, size_t size)
|
|||||||
};
|
};
|
||||||
|
|
||||||
while (done<size) {
|
while (done<size) {
|
||||||
poll(&pollfd, 1, -1);
|
|
||||||
|
|
||||||
ssize_t ret = fd_write(fd, data+done, size-done);
|
ssize_t ret = fd_write(fd, data+done, size-done);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (ret>0)
|
if (ret<0) {
|
||||||
done += ret;
|
poll(&pollfd, 1, -1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
done += ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
|
|||||||
Reference in New Issue
Block a user