diff --git a/panda/src/event/asyncFuture.I b/panda/src/event/asyncFuture.I index 65b762850e..9ab8a0086e 100644 --- a/panda/src/event/asyncFuture.I +++ b/panda/src/event/asyncFuture.I @@ -93,11 +93,6 @@ set_result(std::nullptr_t) { set_result(nullptr, nullptr); } -INLINE void AsyncFuture:: -set_result(TypedObject *result) { - set_result(result, nullptr); -} - INLINE void AsyncFuture:: set_result(TypedReferenceCount *result) { set_result(result, result); @@ -110,7 +105,12 @@ set_result(TypedWritableReferenceCount *result) { INLINE void AsyncFuture:: set_result(const EventParameter &result) { - set_result(result.get_ptr(), result.get_ptr()); + if (result.is_typed_ref_count()) { + set_result(result.get_typed_ref_count_value()); + } + else { + set_result(result.get_ptr()); + } } /** diff --git a/panda/src/event/asyncFuture.cxx b/panda/src/event/asyncFuture.cxx index 7553199a9c..fd2fe9c028 100644 --- a/panda/src/event/asyncFuture.cxx +++ b/panda/src/event/asyncFuture.cxx @@ -176,6 +176,22 @@ notify_done(bool clean_exit) { } } +/** + * Sets this future's result as a generic TypedObject. + */ +void AsyncFuture:: +set_result(TypedObject *result) { + if (result->is_of_type(TypedWritableReferenceCount::get_class_type())) { + set_result((TypedWritableReferenceCount *)result); + } + else if (result->is_of_type(TypedReferenceCount::get_class_type())) { + set_result((TypedReferenceCount *)result); + } + else { + set_result(result, nullptr); + } +} + /** * Sets this future's result. Can only be done while the future is not done. * Calling this marks the future as done and schedules the done callbacks. diff --git a/panda/src/event/asyncFuture.h b/panda/src/event/asyncFuture.h index 102deff8ee..2e62c07d1a 100644 --- a/panda/src/event/asyncFuture.h +++ b/panda/src/event/asyncFuture.h @@ -88,10 +88,10 @@ PUBLISHED: public: INLINE void set_result(std::nullptr_t); - INLINE void set_result(TypedObject *result); INLINE void set_result(TypedReferenceCount *result); INLINE void set_result(TypedWritableReferenceCount *result); INLINE void set_result(const EventParameter &result); + void set_result(TypedObject *result); void set_result(TypedObject *ptr, ReferenceCount *ref_ptr); INLINE TypedObject *get_result() const;