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

Patryk Małek malekpatryk at gmail.com
Fri Oct 16 03:03:59 CDT 2015


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)
==1174==    by 0x3737EE570C: clone (in /lib64/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)
==1174==    by 0x3737EE570C: clone (in /lib64/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()) == 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/tao-users/attachments/20151016/1a9b7369/attachment.html>


More information about the tao-users mailing list