@@ -303,7 +303,7 @@ static PyTypeObject class_metatype_object = {
303303// object.
304304void instance_holder::install (PyObject* self) throw()
305305{
306- assert (Py_TYPE (Py_TYPE (self)) == &class_metatype_object);
306+ assert (PyType_IsSubtype ( Py_TYPE (Py_TYPE (self)), &class_metatype_object) );
307307 m_next = ((objects::instance<>*)self)->objects ;
308308 ((objects::instance<>*)self)->objects = this ;
309309}
@@ -482,7 +482,8 @@ namespace objects
482482 BOOST_PYTHON_DECL void *
483483 find_instance_impl (PyObject* inst, type_info type, bool null_shared_ptr_only)
484484 {
485- if (Py_TYPE (Py_TYPE (inst)) != &class_metatype_object)
485+ if (!Py_TYPE (Py_TYPE (inst)) ||
486+ !PyType_IsSubtype (Py_TYPE (Py_TYPE (inst)), &class_metatype_object))
486487 return 0 ;
487488
488489 instance<>* self = reinterpret_cast <instance<>*>(inst);
@@ -727,7 +728,7 @@ namespace objects
727728
728729void * instance_holder::allocate (PyObject* self_, std::size_t holder_offset, std::size_t holder_size)
729730{
730- assert (Py_TYPE (Py_TYPE (self_)) == &class_metatype_object);
731+ assert (PyType_IsSubtype ( Py_TYPE (Py_TYPE (self_)), &class_metatype_object) );
731732 objects::instance<>* self = (objects::instance<>*)self_;
732733
733734 int total_size_needed = holder_offset + holder_size;
@@ -752,7 +753,7 @@ void* instance_holder::allocate(PyObject* self_, std::size_t holder_offset, std:
752753
753754void instance_holder::deallocate (PyObject* self_, void * storage) throw()
754755{
755- assert (Py_TYPE (Py_TYPE (self_)) == &class_metatype_object);
756+ assert (PyType_IsSubtype ( Py_TYPE (Py_TYPE (self_)), &class_metatype_object) );
756757 objects::instance<>* self = (objects::instance<>*)self_;
757758 if (storage != (char *)self + Py_SIZE (self))
758759 {
0 commit comments