| ... | @@ -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()); |
| 2402 | | 2402 | |
| 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); |
| 2410 | | 2421 | |
| 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, |