From 71b4e1c61390572f18ab07d28b36599ae076894c Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Tue, 25 Feb 2025 08:40:14 -0800 Subject: [PATCH] Use correct value for messageSizes in SendmmsgInplacePacketBatchWriter Summary: `messageSizes` is supposed to be the number of iovecs in each message, and not the length of the iovec. This was causing crashes in Edgeray (T215909454). Reviewed By: jbeshay Differential Revision: D70129535 fbshipit-source-id: 6d79e6ac0789402674e753297984b3691d371338 --- quic/api/QuicBatchWriter.cpp | 2 +- quic/api/test/QuicBatchWriterTest.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/quic/api/QuicBatchWriter.cpp b/quic/api/QuicBatchWriter.cpp index def0042c6..0a47e8127 100644 --- a/quic/api/QuicBatchWriter.cpp +++ b/quic/api/QuicBatchWriter.cpp @@ -282,7 +282,7 @@ ssize_t SendmmsgInplacePacketBatchWriter::write( std::array messageSizes{}; for (size_t i = 0; i < numPacketsBuffered_; i++) { - messageSizes[i] = iovecs_[i].iov_len; + messageSizes[i] = 1; } sock.writem( diff --git a/quic/api/test/QuicBatchWriterTest.cpp b/quic/api/test/QuicBatchWriterTest.cpp index 5b82bb0be..9cbf75f63 100644 --- a/quic/api/test/QuicBatchWriterTest.cpp +++ b/quic/api/test/QuicBatchWriterTest.cpp @@ -400,6 +400,8 @@ TEST_F(QuicBatchWriterTest, TestBatchingSendmmsgInplace) { std::make_shared(&evb); quic::test::MockAsyncUDPSocket sock(qEvb); + gsoSupported_ = false; + auto batchWriter = quic::BatchWriterFactory::makeBatchWriter( quic::QuicBatchingMode::BATCHING_MODE_SENDMMSG, kBatchNum, @@ -452,7 +454,7 @@ TEST_F(QuicBatchWriterTest, TestBatchingSendmmsgInplace) { EXPECT_EQ(count, kBatchNum); for (size_t k = 0; k < count; k++) { - EXPECT_EQ(messageSizes[k], expectedIovecs[k].iov_len); + EXPECT_EQ(messageSizes[k], 1); EXPECT_EQ(expectedIovecs[k].iov_base, iovecs[k].iov_base); EXPECT_EQ(expectedIovecs[k].iov_len, iovecs[k].iov_len); }