From 5c2a64c6f737b0bbc911bfabe4aa24795a5695e1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 28 Jan 2014 10:26:12 -0800 Subject: [PATCH] buffer: make 0-length splice() a no-op This was causing a problem in the Striper, but fixing it here will avoid corner cases all over the tree. Note that we have to bail out before the end-of-buffer check to avoid hitting that check when the bufferlist is also empty. Signed-off-by: Sage Weil Reviewed-by: Greg Farnum (cherry picked from commit ff5abfbdae07ae8a56fa83ebaa92000896f793c2) --- src/common/buffer.cc | 3 +++ src/test/bufferlist.cc | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 493070557159e..e2ca1ba9493cf 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1087,6 +1087,9 @@ void buffer::list::rebuild_page_aligned() // funky modifer void buffer::list::splice(unsigned off, unsigned len, list *claim_by /*, bufferlist& replace_with */) { // fixme? + if (len == 0) + return; + if (off >= length()) throw end_of_buffer(); diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 8b6ca269234ff..53c0702985f42 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -1522,7 +1522,7 @@ TEST(BufferList, splice) { bl.push_back(ptr); } EXPECT_EQ((unsigned)4, bl.buffers().size()); - EXPECT_THROW(bl.splice(0, 0), FailedAssertion); + bl.splice(0, 0); bufferlist other; other.append('X'); -- 2.39.5