diff --git a/datastore/threads/sharedptr.nim b/datastore/threads/sharedptr.nim index 680853f..c7a511a 100644 --- a/datastore/threads/sharedptr.nim +++ b/datastore/threads/sharedptr.nim @@ -50,9 +50,9 @@ type container*: ptr tuple[value: T, cnt: int] proc incr*[T](a: var SharedPtr[T]) = - if a.container != nil and a.cnt != nil: + if a.container != nil: let res = atomicAddFetch(a.cnt, 1, ATOMIC_RELAXED) - echoed "SharedPtr: manual incr: ", res + echoed "SharedPtr: incr: ", res proc decr*[T](x: var SharedPtr[T]) = if x.container != nil: @@ -88,7 +88,10 @@ proc `=dup`*[T](src: SharedPtr[T]): SharedPtr[T] = proc `=copy`*[T](dest: var SharedPtr[T], src: SharedPtr[T]) = if src.container != nil: # echo "SharedPtr: copy: ", src.container.pointer.repr + echoed "SharedPtr: copy:src: ", src.container.pointer.repr, " cnt: ", src.container.cnt, " tp: ", $(typeof(T)) discard atomicAddFetch(addr src.container.cnt, 1, ATOMIC_RELAXED) + if dest.container != nil: + echoed "SharedPtr: copy:dest: ", dest.container.pointer.repr, " cnt: ", dest.container.cnt, " tp: ", $(typeof(T)) `=destroy`(dest) dest.container = src.container