authorgravatar for brian.t.gold@gmail.comBrian Gold <brian.t.gold@gmail.com> 2022-05-09 20:52:09-07:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2022-05-10 11:49:41+02:00
log52651ae7a0deaffff1ecfd47b503ebb1c95aee32
treefada2c32905440ad9f081f1e143f002b6589eb1b
parent62453496bac17f13e1e129de5cf08accddc02302

io_uring cancel test must tolerate CQ reordering

Fixes #11382. Tested on ArchLinux 5.17.5-arch1-1.

1 files changed, 12 insertions(+), 2 deletions(-)

lib/std/os/linux/io_uring.zig+12-2
...@@ -2400,15 +2400,25 @@ test "accept/connect/recv/cancel" {...@@ -2400,15 +2400,25 @@ test "accept/connect/recv/cancel" {
2400 try testing.expectEqual(@as(u64, 0x99999999), sqe_cancel.user_data);2400 try testing.expectEqual(@as(u64, 0x99999999), sqe_cancel.user_data);
2401 try testing.expectEqual(@as(u32, 1), try ring.submit());2401 try testing.expectEqual(@as(u32, 1), try ring.submit());
24022402
2403 const cqe_recv = try ring.copy_cqe();2403 var cqe_recv = try ring.copy_cqe();
2404 if (cqe_recv.err() == .INVAL) return error.SkipZigTest;2404 if (cqe_recv.err() == .INVAL) return error.SkipZigTest;
2405 var cqe_cancel = try ring.copy_cqe();
2406 if (cqe_cancel.err() == .INVAL) return error.SkipZigTest;
2407
2408 // The recv/cancel CQEs may arrive in any order, the recv CQE will sometimes come first:
2409 if (cqe_recv.user_data == 0x99999999 and cqe_cancel.user_data == 0xffffffff) {
2410 const a = cqe_recv;
2411 const b = cqe_cancel;
2412 cqe_recv = b;
2413 cqe_cancel = a;
2414 }
2415
2405 try testing.expectEqual(linux.io_uring_cqe{2416 try testing.expectEqual(linux.io_uring_cqe{
2406 .user_data = 0xffffffff,2417 .user_data = 0xffffffff,
2407 .res = -@as(i32, @enumToInt(linux.E.CANCELED)),2418 .res = -@as(i32, @enumToInt(linux.E.CANCELED)),
2408 .flags = 0,2419 .flags = 0,
2409 }, cqe_recv);2420 }, cqe_recv);
24102421
2411 const cqe_cancel = try ring.copy_cqe();
2412 try testing.expectEqual(linux.io_uring_cqe{2422 try testing.expectEqual(linux.io_uring_cqe{
2413 .user_data = 0x99999999,2423 .user_data = 0x99999999,
2414 .res = 0,2424 .res = 0,