# HG changeset patch # User Mathieu Lacage # Date 1302032379 -7200 # Node ID 00c8ea8e9e4091e891c875e1ff25ea5e75246a7f # Parent 53f1bfb3e91c538c626f2233eed26d82d213da8c bug 1094: Object::GetObject upon dlopen diff -r 53f1bfb3e91c -r 00c8ea8e9e40 src/core/model/object.h --- a/src/core/model/object.h Mon Apr 04 19:44:35 2011 +0100 +++ b/src/core/model/object.h Tue Apr 05 21:39:39 2011 +0200 @@ -388,15 +388,18 @@ Ptr Object::GetObject () const { + // This is an optimization: if the cast works (which is likely), + // things will be pretty fast. T *result = dynamic_cast (m_aggregates->buffer[0]); if (result != 0) { return Ptr (result); } + // if the cast does not work, we try to do a full type check. Ptr found = DoGetObject (T::GetTypeId ()); if (found != 0) { - return Ptr (dynamic_cast (PeekPointer (found))); + return Ptr (static_cast (PeekPointer (found))); } return 0; } @@ -408,7 +411,7 @@ Ptr found = DoGetObject (tid); if (found != 0) { - return Ptr (dynamic_cast (PeekPointer (found))); + return Ptr (static_cast (PeekPointer (found))); } return 0; }