Cleanup casters to release none() to avoid ref counting (#4269)

This commit is contained in:
Aaron Gokaslan 2022-10-21 12:51:26 -04:00 committed by GitHub
parent 36ccb08b0d
commit 2ce76f7833
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 5 deletions

View File

@ -248,7 +248,7 @@ public:
return false;
}
static handle cast(T, return_value_policy /* policy */, handle /* parent */) {
return none().inc_ref();
return none().release();
}
PYBIND11_TYPE_CASTER(T, const_name("None"));
};
@ -291,7 +291,7 @@ public:
if (ptr) {
return capsule(ptr).release();
}
return none().inc_ref();
return none().release();
}
template <typename T>
@ -537,7 +537,7 @@ public:
static handle cast(const CharT *src, return_value_policy policy, handle parent) {
if (src == nullptr) {
return pybind11::none().inc_ref();
return pybind11::none().release();
}
return StringCaster::cast(StringType(src), policy, parent);
}

View File

@ -110,7 +110,7 @@ public:
template <typename Func>
static handle cast(Func &&f_, return_value_policy policy, handle /* parent */) {
if (!f_) {
return none().inc_ref();
return none().release();
}
auto result = f_.template target<function_type>();

View File

@ -311,7 +311,7 @@ struct optional_caster {
template <typename T>
static handle cast(T &&src, return_value_policy policy, handle parent) {
if (!src) {
return none().inc_ref();
return none().release();
}
if (!std::is_lvalue_reference<T>::value) {
policy = return_value_policy_override<Value>::policy(policy);