-
Notifications
You must be signed in to change notification settings - Fork 252
Open
Description
Problem description
I have a piece of C++ code, where a ref-counted class (Outter) holds another ref-counted class (Inner) by nb::ref
. The Inner
class has a method get_name()
that just returns a string. The Outter
class has a method get_inner
that returns an Inner&
.
When I then do two consecutive calls to get_inner
like so:
outter = Outter()
print(outter.get_inner().get_name())
print(outter.get_inner().get_name()) # hits abort here
it hits the abort in intrusive_counter::set_self_py
.
If the get_inner()
returns ref<Inner>
instead of Inner&
, things work fine.
My assumption is that the code that creates a Python object for Inner
gets invoked twice, once for each get_inner()
call. Instead it could first try to call self_py
to check if the object exists, and avoid setting it the second time.
Reproducible example code
This is referenced in #1112
Metadata
Metadata
Assignees
Labels
No labels