This is an automated email from the ASF dual-hosted git repository.

leander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new 9fd7e21e Fix scoped_refptr leave ptr_ uninit when move construct by 
nullptr (#2491)
9fd7e21e is described below

commit 9fd7e21ef78952967e94785180164aaf2821a892
Author: Li Zhiyuan <forlearn_...@163.com>
AuthorDate: Wed Jan 3 14:22:15 2024 +0800

    Fix scoped_refptr leave ptr_ uninit when move construct by nullptr (#2491)
    
    * Fix scoped_refptr leave ptr_ uninit when move construct by nullptr
    
    ---------
    
    Co-authored-by: 扬宁 <yangning....@alibaba-inc.com>
---
 src/butil/memory/ref_counted.h | 14 +++++---------
 test/ref_counted_unittest.cc   | 13 +++++++++++++
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/butil/memory/ref_counted.h b/src/butil/memory/ref_counted.h
index 8fbb5d0d..fb8bc72d 100644
--- a/src/butil/memory/ref_counted.h
+++ b/src/butil/memory/ref_counted.h
@@ -286,20 +286,16 @@ class scoped_refptr {
   }
 
   scoped_refptr(scoped_refptr<T>&& r) noexcept {
-    if (r.ptr_){
-      ptr_ = r.ptr_;
-      r.ptr_ = nullptr;
-    }
+    ptr_ = r.ptr_;
+    r.ptr_ = nullptr;
   }
 
   template <typename U>
   scoped_refptr(scoped_refptr<U>&& r) noexcept {
-    if (r.ptr_){
-      ptr_ = r.ptr_;
-      r.ptr_ = nullptr;
-    }
+    ptr_ = r.ptr_;
+    r.ptr_ = nullptr;
   }
- 
+
   ~scoped_refptr() {
     if (ptr_)
       ptr_->Release();
diff --git a/test/ref_counted_unittest.cc b/test/ref_counted_unittest.cc
index 8de76002..7415ba3e 100644
--- a/test/ref_counted_unittest.cc
+++ b/test/ref_counted_unittest.cc
@@ -82,3 +82,16 @@ TEST(RefCountedUnitTest, ScopedRefPtrBooleanOperations) {
   EXPECT_NE(raw_p, p2);
   EXPECT_EQ(p1, p2);
 }
+
+TEST(RefCountedUnitTest, ScopedRefPtrMoveCtor)
+{
+  scoped_refptr<SelfAssign> p1 = new SelfAssign;
+  EXPECT_TRUE(p1);
+
+  scoped_refptr<SelfAssign> p2(std::move(p1));
+  EXPECT_TRUE(p2);
+  EXPECT_FALSE(p1);
+
+  scoped_refptr<SelfAssign> p3(std::move(p1));
+  EXPECT_FALSE(p3);
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org
For additional commands, e-mail: dev-h...@brpc.apache.org

Reply via email to