mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +03:00
varlink: also handle EINTR gracefully when waiting for EIO via ppoll()
This commit is contained in:
parent
7c75f34131
commit
6976bf5cd6
@ -1025,7 +1025,7 @@ static void handle_revents(Varlink *v, int revents) {
|
|||||||
if ((revents & (POLLOUT|POLLHUP)) == 0)
|
if ((revents & (POLLOUT|POLLHUP)) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
varlink_log(v, "Anynchronous connection completed.");
|
varlink_log(v, "Asynchronous connection completed.");
|
||||||
v->connecting = false;
|
v->connecting = false;
|
||||||
} else {
|
} else {
|
||||||
/* Note that we don't care much about POLLIN/POLLOUT here, we'll just try reading and writing
|
/* Note that we don't care much about POLLIN/POLLOUT here, we'll just try reading and writing
|
||||||
@ -1075,6 +1075,9 @@ int varlink_wait(Varlink *v, usec_t timeout) {
|
|||||||
return events;
|
return events;
|
||||||
|
|
||||||
r = fd_wait_for_event(fd, events, t);
|
r = fd_wait_for_event(fd, events, t);
|
||||||
|
if (r < 0 && ERRNO_IS_TRANSIENT(r)) /* Treat EINTR as not a timeout, but also nothing happened, and
|
||||||
|
* the caller gets a chance to call back into us */
|
||||||
|
return 1;
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
@ -1161,8 +1164,12 @@ int varlink_flush(Varlink *v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
r = fd_wait_for_event(v->fd, POLLOUT, USEC_INFINITY);
|
r = fd_wait_for_event(v->fd, POLLOUT, USEC_INFINITY);
|
||||||
if (r < 0)
|
if (r < 0) {
|
||||||
|
if (ERRNO_IS_TRANSIENT(r))
|
||||||
|
continue;
|
||||||
|
|
||||||
return varlink_log_errno(v, r, "Poll failed on fd: %m");
|
return varlink_log_errno(v, r, "Poll failed on fd: %m");
|
||||||
|
}
|
||||||
|
|
||||||
assert(r != 0);
|
assert(r != 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user