From 612e0d860141bd7ea11d1f747d5ad2e34fdee97d Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Mon, 7 Jun 2021 12:49:34 -0700 Subject: [PATCH] add debug ref count logging --- Cargo.toml | 1 + src/bytes.rs | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4a008f1..683144b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ std = [] [dependencies] serde = { version = "1.0.60", optional = true, default-features = false, features = ["alloc"] } +tracing = { version = "0.1.26", default-features = false } [dev-dependencies] serde_test = "1.0" diff --git a/src/bytes.rs b/src/bytes.rs index b1b35ea..b7ae3a9 100644 --- a/src/bytes.rs +++ b/src/bytes.rs @@ -968,7 +968,7 @@ unsafe fn shared_drop(data: &mut AtomicPtr<()>, _ptr: *const u8, _len: usize) { unsafe fn shallow_clone_arc(shared: *mut Shared, ptr: *const u8, len: usize) -> Bytes { let old_size = (*shared).ref_cnt.fetch_add(1, Ordering::Relaxed); - + tracing::trace!(shared.addr = %format_args!("{:p}", shared), shared.refs = old_size, "shallow_clone_arc"); if old_size > usize::MAX >> 1 { crate::abort(); } @@ -1055,7 +1055,9 @@ unsafe fn shallow_clone_vec( unsafe fn release_shared(ptr: *mut Shared) { // `Shared` storage... follow the drop steps from Arc. - if (*ptr).ref_cnt.fetch_sub(1, Ordering::Release) != 1 { + let ref_cnt = (*ptr).ref_cnt.fetch_sub(1, Ordering::Release); + tracing::trace!(shared.addr = %format_args!("{:p}", ptr), shared.refs = ref_cnt, "release_shared"); + if ref_cnt != 1 { return; } @@ -1080,6 +1082,8 @@ unsafe fn release_shared(ptr: *mut Shared) { // Drop the data Box::from_raw(ptr); + + tracing::trace!(shared.addr = %format_args!("{:p}", ptr), "release_shared: dropped"); } // compile-fails