From a5bacf453e476f941bfb84c75843020653bd1d3a Mon Sep 17 00:00:00 2001 From: ehds Date: Sun, 18 Oct 2026 02:30:26 +0800 Subject: [PATCH 1/2] fix enqueue move-only --- src/butil/containers/mpsc_queue.h | 2 +- test/mpsc_queue_unittest.cc | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/butil/containers/mpsc_queue.h b/src/butil/containers/mpsc_queue.h index cbb48cb3f6..95c5a4062c 100644 --- a/src/butil/containers/mpsc_queue.h +++ b/src/butil/containers/mpsc_queue.h @@ -103,7 +103,7 @@ template void MPSCQueue::Enqueue(T&& data) { auto node = (MPSCQueueNode*)_alloc.Alloc(); node->next = MPSCQueueNode::UNCONNECTED; - node->data_mem.Init(data); + node->data_mem.Init(std::move(data)); EnqueueImpl(node); } diff --git a/test/mpsc_queue_unittest.cc b/test/mpsc_queue_unittest.cc index 800e45aeb5..e331f84637 100644 --- a/test/mpsc_queue_unittest.cc +++ b/test/mpsc_queue_unittest.cc @@ -158,6 +158,11 @@ TEST(MPSCQueueTest, destroys_dequeued_element) { ASSERT_EQ(0, DestructionTracked::alive); } +TEST(MPSCQueueTest, enqueue_move_only) { + butil::MPSCQueue> q; + q.Enqueue(std::make_unique(1)); +} + TEST(MPSCQueueTest, mpsc_test_allocator) { butil::ObjectPoolAllocator alloc; From dbdf63fc5b493350f674ff7c5cc889556ba8c5f7 Mon Sep 17 00:00:00 2001 From: Dongsheng He Date: Mon, 19 Oct 2026 23:54:34 +0800 Subject: [PATCH 2/2] Add test for move-only enqueue and dequeue Added test for enqueueing and dequeuing move-only types in MPSCQueue. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- test/mpsc_queue_unittest.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/mpsc_queue_unittest.cc b/test/mpsc_queue_unittest.cc index e331f84637..97fb9ee450 100644 --- a/test/mpsc_queue_unittest.cc +++ b/test/mpsc_queue_unittest.cc @@ -161,6 +161,10 @@ TEST(MPSCQueueTest, destroys_dequeued_element) { TEST(MPSCQueueTest, enqueue_move_only) { butil::MPSCQueue> q; q.Enqueue(std::make_unique(1)); + std::unique_ptr out; + ASSERT_TRUE(q.Dequeue(out)); + ASSERT_NE(nullptr, out); + ASSERT_EQ(1, *out); } TEST(MPSCQueueTest, mpsc_test_allocator) {