From 48aaf3cbee045852a382097f19e815638ab20926 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 14 Nov 2018 00:47:06 +0100 Subject: [PATCH] common: try to skip atomical decrement in buffer::ptr::release(). Signed-off-by: Radoslaw Zarzynski --- src/common/buffer.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index f6a33e43b68..45af914f989 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -539,7 +539,8 @@ static ceph::spinlock debug_lock; { if (_raw) { bdout << "ptr " << this << " release " << _raw << bendl; - if (--_raw->nref == 0) { + const bool last_one = (1 == _raw->nref.load(std::memory_order_acquire)); + if (likely(last_one) || --_raw->nref == 0) { // BE CAREFUL: this is called also for hypercombined ptr_node. After // freeing underlying raw, `*this` can become inaccessible as well! const auto* delete_raw = _raw; -- 2.47.3