[OmniORB] "pure virtual method called"

Bastiaan Bakker bastiaan.bakker@lifeline.nl
Tue Oct 29 23:05:02 2002


Hi Cameron,

All cases where I encountered 'pure virtual method called' where
situations were a object method was called after destruction of the
object. For example, by using both _var and calling CORBA::release(). 
So setting a breakpoint on the destructors of your servants may help.

Good luck,

Bastiaan Bakker
 
 

On Tue, 2002-10-29 at 10:02, Cameron Rochester wrote:
> Hello all,
> 
> I am having a problem with "pure virtual method called" (this is the message
> printed on screen just before the app core dumps). The exact same code
> worked with OmniORB 3.0.3 but does not appear to work with OmniORB 4.0.0.
> 
> The code that appears to be giving this exception is:
> 
> EventChannelImpl::EventChannelImpl()
> {
>     ConsumerAdminImpl* ca = new ConsumerAdminImpl();
>     m_consumerAdmin = ca->_this();
>     ca->_remove_ref();
> 
>     SupplierAdminImpl* sa = new SupplierAdminImpl();
>     m_supplierAdmin = sa->_this();
>     sa->_remove_ref();
> }
> 
> where the member variables are defined to be:
> 
>     CosEventChannelAdmin::ConsumerAdmin_var   m_consumerAdmin;
>     CosEventChannelAdmin::SupplierAdmin_var   m_supplierAdmin;
> 
> and the classes inherit from the following:
> 
> class ConsumerAdminImpl
>     : public virtual POA_CosEventChannelAdmin::ConsumerAdmin,
>       public virtual PortableServer::RefCountServantBase
> 
> class SupplierAdminImpl
>     : public virtual POA_CosEventChannelAdmin::SupplierAdmin,
>       public virtual PortableServer::RefCountServantBase
> 
> 
> Does anyone have any ideas about this problem? Below is the stack trace from
> the core dump. The call to "_this()" appears to be the culprit. If anyone
> would be able to help it would be most appreciated, please let me know if
> you want more information/code.
> 
> Thanks in advance
> Cameron Rochester
> 
> #0  0xfe3d9da0 in __sigprocmask () from /usr/lib/libthread.so.1
> #1  0xfe3cf400 in _resetsig () from /usr/lib/libthread.so.1
> #2  0xfe3ceb4c in _sigon () from /usr/lib/libthread.so.1
> #3  0xfe3d1a28 in _thrp_kill () from /usr/lib/libthread.so.1
> #4  0xfe2395b0 in abort () from /usr/lib/libc.so.1
> #5  0xff156e00 in __default_terminate ()
>    from /home/cameronr/omni/build/lib/libomnithread.so.3
> #6  0xff156e30 in __terminate ()
>    from /home/cameronr/omni/build/lib/libomnithread.so.3
> #7  0xff2d1d04 in __pure_virtual ()
>    from /home/cameronr/omni/build/lib/libomniORB4.so.0
> #8  0xff264f50 in
> servant__this__Q24omni10omniOrbPOAPQ214PortableServer11Servant
> BasePCc () from /home/cameronr/omni/build/lib/libomniORB4.so.0
> #9  0xff271bc4 in PortableServer::ServantBase::_do_this ()
>    from /home/cameronr/omni/build/lib/libomniORB4.so.0
> #10 0x416ac in EventChannelImpl::EventChannelImpl ()
> #11 0x40168 in main ()
> _______________________________________________
> omniORB-list mailing list
> omniORB-list@omniorb-support.com
> http://www.omniorb-support.com/mailman/listinfo/omniorb-list