varlink: add server write states to disconnect check
While a server is in the VARLINK_PENDING_METHOD or VARLINK_PENDING_METHOD_MORE states and its write end is disconnected and it gets a POLLHUP, we should disconnect since it can't write anymore. In the case of systemd-oomd disconnecting while pid1 was pending-more, this condition left pid1 in a state where it started throttling from continually getting POLLHUP.
This commit is contained in:
parent
4d824a4e0b
commit
e8e9227f5c
|
@ -418,6 +418,11 @@ static int varlink_test_disconnect(Varlink *v) {
|
|||
if (IN_SET(v->state, VARLINK_IDLE_CLIENT) && (v->write_disconnected || v->got_pollhup))
|
||||
goto disconnect;
|
||||
|
||||
/* The server is still expecting to write more, but its write end is disconnected and it got a POLLHUP
|
||||
* (i.e. from a disconnected client), so disconnect. */
|
||||
if (IN_SET(v->state, VARLINK_PENDING_METHOD, VARLINK_PENDING_METHOD_MORE) && v->write_disconnected && v->got_pollhup)
|
||||
goto disconnect;
|
||||
|
||||
return 0;
|
||||
|
||||
disconnect:
|
||||
|
|
Loading…
Reference in New Issue