summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/9p_io.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/9p_io.zig b/src/9p_io.zig
index 651b3d0a..0f5e0a77 100644
--- a/src/9p_io.zig
+++ b/src/9p_io.zig
@@ -1398,9 +1398,18 @@ test "Unix TCP and QUIC share one listener through reads writes reconnects and r
}
Client.nap(1);
}
+ // The client has hung up, but its connection's task may not have
+ // seen that yet. The releases it then owes are refused once
+ // `reset` starts cutting (they name the old editor's opens), and
+ // this test's "replacement" is the same editor, so they would
+ // stay in `p.fs.opens`. Let the hangup pay them first, resting
+ // so the task can take the turn: that is what is under test here.
+ const settle_by = Client.nowMs() + 3 * Client.budget_ms;
+ while (l.runner.count() != 0 and Client.nowMs() < settle_by) Client.nap(1);
pardes.turn.wake();
try testing.expect(worker.done.load(.acquire));
if (worker.failure) |err| return err;
+ try testing.expectEqual(@as(usize, 0), l.runner.count());
l.reset(p);
try testing.expectEqual(@as(usize, 0), l.runner.count());
for (&l.conns, 0..) |conn, i| try testing.expect(!l.live(@intCast(i)) and !conn.draining);