[tao-users] CORBA::ORB_init leaks memory?

Johnny Willemsen jwillemsen at remedy.nl
Fri Oct 16 03:22:18 CDT 2015


Hi,

Probably you are not releasing all CORBA references or made an error
with the usage of var/ptr/duplicate. When you run the TAO/tests/Hello
test you should see no valgrind leaks (at least it doesn't do with the
latest micro). Try to just do a CORBA::init and a shutdown, that should
be leak free.

Johnny

On 10/16/2015 10:03 AM, Patryk Małek wrote:
> Hello,
> 
> I have a system using ace+tao (2.1.5. + 6.1.5) and I have a problem with
> CORBA::ORB_init that leaks memory. valgrind stacktrace:
> 
> 
> ==1174== 808 bytes in 1 blocks are possibly lost in loss record 192 of 214
> ==1174==    at 0x4A07982: operator new[](unsigned long)
> (vg_replace_malloc.c:389)
> ==1174==    by 0x3C726EF681: ACE_Array_Map<ACE_String_Base<char>,
> ACE_String_Base<char>, std::equal_to<ACE_String_Base<char> >
>>::ACE_Array_Map(unsigned long) (Array_Map.inl:13)
> ==1174==    by 0x3C726F1CFA: TAO_ORB_Parameters::TAO_ORB_Parameters()
> (params.cpp:68)
> ==1174==    by 0x3C726EE78A: TAO_ORB_Core::TAO_ORB_Core(char const*,
> ACE_Intrusive_Auto_Ptr<ACE_Service_Gestalt>) (ORB_Core.cpp:268)
> ==1174==    by 0x3C726E45CF: CORBA::ORB_init(int&, char**, char const*)
> (ORB.cpp:1290)
> ==1174==    by 0x4B8E98: InterfaceThread::init() (InterfaceThread.cpp:598)
> ==1174==    by 0x4B81D9: InterfaceThread::run() (InterfaceThread.cpp:523)
> ==1174==    by 0x579384D: Thread::exec() (Thread.cpp:51)
> ==1174==    by 0x5793781: Thread::execThread_(void*) (Thread.cpp:37)
> ==1174==    by 0x37382077F0: start_thread (in /lib64/libpthread-2.12.so
> <http://libpthread-2.12.so>)
> ==1174==    by 0x3737EE570C: clone (in /lib64/libc-2.12.so
> <http://libc-2.12.so>)
> ==1174==
> ==1174== 20,488 bytes in 1 blocks are possibly lost in loss record 211
> of 214
> ==1174==    at 0x4A07982: operator new[](unsigned long)
> (vg_replace_malloc.c:389)
> ==1174==    by 0x3C726EF681: ACE_Array_Map<ACE_String_Base<char>,
> ACE_String_Base<char>, std::equal_to<ACE_String_Base<char> >
>>::ACE_Array_Map(unsigned long) (Array_Map.inl:13)
> ==1174==    by 0x3C726EE7A3: TAO_ORB_Core::TAO_ORB_Core(char const*,
> ACE_Intrusive_Auto_Ptr<ACE_Service_Gestalt>) (ORB_Core.cpp:268)
> ==1174==    by 0x3C726E45CF: CORBA::ORB_init(int&, char**, char const*)
> (ORB.cpp:1290)
> ==1174==    by 0x4B8E98: InterfaceThread::init() (InterfaceThread.cpp:598)
> ==1174==    by 0x4B81D9: InterfaceThread::run() (InterfaceThread.cpp:523)
> ==1174==    by 0x579384D: Thread::exec() (Thread.cpp:51)
> ==1174==    by 0x5793781: Thread::execThread_(void*) (Thread.cpp:37)
> ==1174==    by 0x37382077F0: start_thread (in /lib64/libpthread-2.12.so
> <http://libpthread-2.12.so>)
> ==1174==    by 0x3737EE570C: clone (in /lib64/libc-2.12.so
> <http://libc-2.12.so>)
> ==1174== 
> ==1174== 32,776 bytes in 1 blocks are possibly lost in loss record 213
> of 214
> ==1174==    at 0x4A06E7C: operator new[](unsigned long, std::nothrow_t
> const&) (vg_replace_malloc.c:420)
> ==1174==    by 0x3C72328141:
> ACE_Notification_Queue::allocate_more_buffers() (Notification_Queue.cpp:83)
> ==1174==    by 0x3C7232884F: ACE_Notification_Queue::open()
> (Notification_Queue.cpp:38)
> ==1174==    by 0x3C723509EB:
> ACE_Select_Reactor_Notify::open(ACE_Reactor_Impl*,
> ACE_Abstract_Timer_Queue<ACE_Event_Handler*>*, int)
> (Select_Reactor_Base.cpp:619)
> ==1174==    by 0x3C7236E667:
> ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::open(unsigned
> long, bool, ACE_Sig_Handler*,
> ACE_Abstract_Timer_Queue<ACE_Event_Handler*>*, int, ACE_Reactor_Notify*)
> [clone .clone.3] (Select_Reactor_T.cpp:424)
> ==1174==    by 0x3C7236EAB0: ACE_Select_Reactor_T (Select_Reactor_T.cpp:549)
> ==1174==    by 0x3C7236EAB0: ACE_TP_Reactor::ACE_TP_Reactor(unsigned
> long, bool, ACE_Sig_Handler*,
> ACE_Abstract_Timer_Queue<ACE_Event_Handler*>*, bool, int)
> (TP_Reactor.cpp:114)
> ==1174==    by 0x3C726A2A57:
> TAO_Default_Resource_Factory::allocate_reactor_impl() const
> (default_resource.cpp:768)
> ==1174==    by 0x3C726A2903: TAO_Default_Resource_Factory::get_reactor()
> (default_resource.cpp:786)
> ==1174==    by 0x3C726CF7EE: TAO_Leader_Follower::reactor()
> (Leader_Follower.cpp:152)
> ==1174==    by 0x3C726EC533: TAO_ORB_Core::init(int&, char**)
> (ORB_Core.cpp:1249)
> ==1174==    by 0x3C726E47C9: CORBA::ORB_init(int&, char**, char const*)
> (ORB.cpp:1355)
> ==1174==    by 0x4B8E98: InterfaceThread::init() (InterfaceThread.cpp:598)
> 
> 
> orb is of type CORBA::ORB_var;
> 
> ​InterfaceThread.cpp:598  orb = CORBA::ORB_init(argc, argv);​
> 
> then in InterafceThread destructor I release it:
> 
>     if (CORBA::is_nil(orb.in <http://orb.in>()) == false) {
>         orb->shutdown(1);
>         orb->destroy();
>         CORBA::release(orb);
>         orb = CORBA::ORB::_nil();
>     }
> 
> ​I do not know what is the problem here. Can anyone help me here? I have
> tried to dig in forums but I encounter 14 year old threads :)​
> 
> 
> -- 
> 
> kind regards, pozdrawiam, 
> Patryk Małek
> 
> 
> 
> 
> _______________________________________________
> tao-users mailing list
> tao-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/cgi-bin/mailman/listinfo/tao-users
> 


More information about the tao-users mailing list