Skip to content

Commit 7a07920

Browse files
committed
trace Rc, rc::Weak, Arc, sync::Weak, Mutex
1 parent 9d59ed4 commit 7a07920

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

src/trace.rs

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -458,12 +458,18 @@ mod impls {
458458
pub use super::*;
459459
use std::rc;
460460

461-
impl<T> Trace for rc::Rc<T> {
462-
fn trace(&self, _tracer: &mut Tracer) { }
461+
impl<T: Trace> Trace for rc::Rc<T> {
462+
fn trace(&self, tracer: &mut Tracer) {
463+
(**self).trace(tracer);
464+
}
463465
}
464466

465-
impl<T> Trace for rc::Weak<T> {
466-
fn trace(&self, _tracer: &mut Tracer) { }
467+
impl<T: Trace> Trace for rc::Weak<T> {
468+
fn trace(&self, tracer: &mut Tracer) {
469+
if let Some(t) = self.upgrade() {
470+
(*t).trace(tracer);
471+
}
472+
}
467473
}
468474
}
469475

@@ -484,8 +490,18 @@ mod impls {
484490
pub use super::*;
485491
use std::sync;
486492

487-
impl<T> Trace for sync::Arc<T> {
488-
fn trace(&self, _tracer: &mut Tracer) { }
493+
impl<T: Trace> Trace for sync::Arc<T> {
494+
fn trace(&self, tracer: &mut Tracer) {
495+
(**self).trace(tracer);
496+
}
497+
}
498+
499+
impl<T: Trace> Trace for sync::Weak<T> {
500+
fn trace(&self, tracer: &mut Tracer) {
501+
if let Some(t) = self.upgrade() {
502+
(*t).trace(tracer);
503+
}
504+
}
489505
}
490506

491507
impl Trace for sync::Barrier {
@@ -496,8 +512,12 @@ mod impls {
496512
fn trace(&self, _tracer: &mut Tracer) { }
497513
}
498514

499-
impl<T> Trace for sync::Mutex<T> {
500-
fn trace(&self, _tracer: &mut Tracer) { }
515+
impl<T: Trace> Trace for sync::Mutex<T> {
516+
fn trace(&self, tracer: &mut Tracer) {
517+
if let Ok(t) = self.lock() {
518+
t.trace(tracer);
519+
}
520+
}
501521
}
502522

503523
impl Trace for sync::Once {
@@ -510,8 +530,8 @@ mod impls {
510530

511531
impl<T: Trace> Trace for sync::RwLock<T> {
512532
fn trace(&self, tracer: &mut Tracer) {
513-
if let Ok(v) = self.write() {
514-
v.trace(tracer);
533+
if let Ok(t) = self.write() {
534+
t.trace(tracer);
515535
}
516536
}
517537
}

0 commit comments

Comments
 (0)