From 77524358658a11199b9e5a48383c56730e17e215 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Wed, 19 Mar 2025 00:22:03 +0200 Subject: [PATCH] l2cap-tester: ensure SO_SNDBUF is large enough for the writes Since btdev runs from same thread and won't flush, SO_SNDBUF needs to hold all data we are going to write. Fix spurious test failure in "L2CAP LE Client - Write 32k Success". --- tools/l2cap-tester.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c index e56773d13..41ef62578 100644 --- a/tools/l2cap-tester.c +++ b/tools/l2cap-tester.c @@ -1451,8 +1451,9 @@ static void l2cap_write_data(struct test_data *data, GIOChannel *io, const struct l2cap_data *l2data = data->test_data; struct bthost *bthost; ssize_t ret; - int sk; + int sk, size; unsigned int count; + socklen_t len = sizeof(size); sk = g_io_channel_unix_get_fd(io); @@ -1464,6 +1465,15 @@ static void l2cap_write_data(struct test_data *data, GIOChannel *io, l2cap_tx_timestamping(data, io); + /* Socket buffer needs to hold what we send, btdev doesn't flush now */ + ret = getsockopt(sk, SOL_SOCKET, SO_SNDBUF, &size, &len); + if (!ret) { + size += l2data->data_len * (l2data->repeat_send + 1); + ret = setsockopt(sk, SOL_SOCKET, SO_SNDBUF, &size, len); + if (ret) + tester_warn("Failed to set SO_SNDBUF = %d", size); + } + for (count = 0; count < l2data->repeat_send + 1; ++count) { ret = l2cap_send(sk, l2data->write_data, l2data->data_len, data->l2o.omtu); -- 2.47.3