wl: send HUP event when VFDs are hungup

It is essential that paste operations on the guest receive a hangup
letting them know that there is no more data to read. This change fixes
that behavior, which was broken by thew new PollContext based logic,
which separates out the readable and hungup code paths.

TEST=finished wayland pastes receive EOF
BUG=chromium:835112

Change-Id: I764124ab2eabb32d8cc25a3a4c0dfbe49b26e799
Reviewed-on: https://chromium-review.googlesource.com/1031292
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: David Reveman <reveman@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Reviewed-by: Stephen Barber <smbarber@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
This commit is contained in:
Zach Reizner 2018-04-26 13:44:11 -07:00 committed by chrome-bot
parent dafdbc01cb
commit 71aedde5af

View file

@ -838,9 +838,16 @@ impl WlState {
for event in events.as_ref().iter_hungup() { for event in events.as_ref().iter_hungup() {
if !event.readable() { if !event.readable() {
if let Err(e) = self.close(event.token()) { let vfd_id = event.token();
if let Err(e) = self.close(vfd_id) {
warn!("failed to close vfd: {:?}", e) warn!("failed to close vfd: {:?}", e)
} }
// Once the vfd has been hungup and there is nothing left to read, it's time to send
// the HUP event over virtio. It's very important that this in_queue entry gets
// pushed /after/ we self.close the vfd_id because part of the close operation for a
// vfd is removing all pending in_queue entries related to the vfd, regardless of
// type.
self.in_queue.push_back((vfd_id, WlRecv::Hup));
} }
} }
} }