[Ace-users] [tao-users] memory leak with thread-per-connection model

Friedhelm Wolf fwolf at dre.vanderbilt.edu
Tue Nov 6 15:35:20 CST 2007


Hi Johnny,

after updating to the current svn status (11/6/07), I get different, but 
not better valgrind results, as you can see from the attached log:

==31988== 1 bytes in 1 blocks are definitely lost in loss record 1 of 10
==31988==    at 0x1B9077FB: operator new(unsigned, std::nothrow_t 
const&) (vg_replace_malloc.c:135)
==31988==    by 0x1BC7FD2F: ACE_TSS<ACE_Dynamic>::make_TSS_TYPE() const 
(TSS_T.cpp:60)
==31988==    by 0x1BC8007B: ACE_TSS<ACE_Dynamic>::ts_get() const 
(TSS_T.cpp:219)
==31988==    by 0x1BC80222: ACE_TSS_Singleton<ACE_Dynamic, 
ACE_Null_Mutex>::instance() (TSS_T.cpp:53)
==31988==    by 0x1BC7FCB6: ACE_Dynamic::instance() (Dynamic.cpp:26)
==31988==    by 0x1BB15A74: 
TAO_Connect_Creation_Strategy<TAO_IIOP_Connection_Handler>::make_svc_handler(TAO_IIOP_Connection_Handler*&) 
(Svc_Handler.cpp:72)
==31988==    by 0x1BB1429A: 
ACE_Strategy_Connector<TAO_IIOP_Connection_Handler, 
ACE_SOCK_Connector>::make_svc_handler(TAO_IIOP_Connection_Handler*&) 
(Connector.cpp:895)
==31988==    by 0x1BB15138: ACE_Connector<TAO_IIOP_Connection_Handler, 
ACE_SOCK_Connector>::connect_i(TAO_IIOP_Connection_Handler*&, 
TAO_IIOP_Connection_Handler**, ACE_INET_Addr const&, ACE_Synch_Options 
const&, ACE_INET_Addr const&, int, int, int) (Connector.cpp:369)
==31988==    by 0x1BB12EBA: 
TAO_IIOP_Connector::begin_connection(TAO_IIOP_Connection_Handler*&, 
TAO::Profile_Transport_Resolver*, TAO_IIOP_Endpoint*, ACE_Time_Value*) 
(Connector.cpp:328)
==31988==    by 0x1BB13C0E: 
TAO_IIOP_Connector::make_connection(TAO::Profile_Transport_Resolver*, 
TAO_Transport_Descriptor_Interface&, ACE_Time_Value*) 
(IIOP_Connector.cpp:195)
==31988==    by 0x1BB833F0: 
TAO_Connector::connect(TAO::Profile_Transport_Resolver*, 
TAO_Transport_Descriptor_Interface*, ACE_Time_Value*) 
(Transport_Connector.cpp:375)
==31988==    by 0x1BB578F0: 
TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_Descriptor_Interface*, 
ACE_Time_Value*, bool) (Profile_Transport_Resolver.cpp:171)
==31988==
==31988==
==31988== 36 bytes in 1 blocks are definitely lost in loss record 6 of 10
==31988==    at 0x1B9077FB: operator new(unsigned, std::nothrow_t 
const&) (vg_replace_malloc.c:135)
==31988==    by 0x1BB48F7F: 
ACE_TSS<TAO_ORB_Core_TSS_Resources>::make_TSS_TYPE() const (TSS_T.cpp:60)
==31988==    by 0x1BB26CFB: 
ACE_TSS<TAO_ORB_Core_TSS_Resources>::ts_get() const (TSS_T.cpp:219)
==31988==    by 0x1BB25C38: TAO_Leader_Follower::set_client_thread() 
(TSS_T.cpp:53)
==31988==    by 0x1BB25DD6: 
TAO_Leader_Follower::wait_for_event(TAO_LF_Event*, TAO_Transport*, 
ACE_Time_Value*) (Leader_Follower.inl:205)
==31988==    by 0x1BB271D0: 
TAO_LF_Connect_Strategy::wait_i(TAO_LF_Event*, TAO_Transport*, 
ACE_Time_Value*) (LF_Connect_Strategy.cpp:54)
==31988==    by 0x1BAF05FE: TAO_Connect_Strategy::wait(TAO_Transport*, 
ACE_Time_Value*) (Connect_Strategy.cpp:41)
==31988==    by 0x1BB82693: 
TAO_Connector::wait_for_connection_completion(TAO::Profile_Transport_Resolver*, 
TAO_Transport*&, ACE_Time_Value*) (Transport_Connector.cpp:528)
==31988==    by 0x1BB13533: TAO_IIOP_Connector::complete_connection(int, 
TAO_Transport_Descriptor_Interface&, TAO_IIOP_Connection_Handler**&, 
TAO_IIOP_Endpoint**, unsigned, TAO::Profile_Transport_Resolver*, 
TAO_LF_Multi_Event*, ACE_Time_Value*) (IIOP_Connector.cpp:418)
==31988==    by 0x1BB13C80: 
TAO_IIOP_Connector::make_connection(TAO::Profile_Transport_Resolver*, 
TAO_Transport_Descriptor_Interface&, ACE_Time_Value*) 
(IIOP_Connector.cpp:225)
==31988==    by 0x1BB833F0: 
TAO_Connector::connect(TAO::Profile_Transport_Resolver*, 
TAO_Transport_Descriptor_Interface*, ACE_Time_Value*) 
(Transport_Connector.cpp:375)
==31988==    by 0x1BB578F0: 
TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_Descriptor_Interface*, 
ACE_Time_Value*, bool) (Profile_Transport_Resolver.cpp:171)
==31988==
==31988==
==31988== 72 bytes in 1 blocks are possibly lost in loss record 9 of 10
==31988==    at 0x1B907F75: calloc (vg_replace_malloc.c:175)
==31988==    by 0x1B8F2188: (within /lib/ld-2.3.6.so)
==31988==    by 0x1B8F224B: _dl_allocate_tls (in /lib/ld-2.3.6.so)
==31988==    by 0x1BD47681: pthread_create@@GLIBC_2.1 (in 
/lib/tls/libpthread-2.3.6.so)
==31988==    by 0x1BCA0ACA: ACE_OS::thr_create(void* (*)(void*), void*, 
long, unsigned long*, unsigned long*, long, void*, unsigned, 
ACE_Base_Thread_Adapter*) (OS_NS_Thread.cpp:4267)
==31988==    by 0x1BCD3890: ACE_Thread_Manager::spawn_i(void* 
(*)(void*), void*, long, unsigned long*, unsigned long*, long, int, 
void*, unsigned, ACE_Task_Base*) (Thread.inl:97)
==31988==    by 0x1BCD717F: ACE_Thread_Manager::spawn_n(unsigned, void* 
(*)(void*), void*, long, long, int, ACE_Task_Base*, unsigned long*, 
void**, unsigned*) (Thread_Manager.cpp:734)
==31988==    by 0x1BCD10E5: ACE_Task_Base::activate(long, int, int, 
long, int, ACE_Task_Base*, unsigned long*, void**, unsigned*, unsigned 
long*) (Task.cpp:174)
==31988==    by 0x1BB79862: 
TAO_Thread_Per_Connection_Handler::activate(long, int, int, long, int, 
ACE_Task_Base*, unsigned long*, void**, unsigned*, unsigned long*) 
(Thread_Per_Connection_Handler.cpp:60)
==31988==    by 0x1BB10B83: 
TAO_Concurrency_Strategy<TAO_IIOP_Connection_Handler>::activate_svc_handler(TAO_IIOP_Connection_Handler*, 
void*) (Acceptor_Impl.cpp:122)
==31988==    by 0x1BB0EF6D: 
ACE_Strategy_Acceptor<TAO_IIOP_Connection_Handler, 
ACE_SOCK_Acceptor>::activate_svc_handler(TAO_IIOP_Connection_Handler*) 
(Acceptor.cpp:779)
==31988==    by 0x1BB0FB1E: ACE_Acceptor<TAO_IIOP_Connection_Handler, 
ACE_SOCK_Acceptor>::handle_input(int) (Acceptor.cpp:406)
==31988==
==31988==
==31988== 148 bytes in 1 blocks are definitely lost in loss record 10 of 10
==31988==    at 0x1B9077FB: operator new(unsigned, std::nothrow_t 
const&) (vg_replace_malloc.c:135)
==31988==    by 0x1BB8432F: ACE_TSS<TAO_TSS_Resources>::make_TSS_TYPE() 
const (TSS_T.cpp:60)
==31988==    by 0x1BB8447B: ACE_TSS<TAO_TSS_Resources>::ts_get() const 
(TSS_T.cpp:219)
==31988==    by 0x1BB84622: TAO_TSS_Singleton<TAO_TSS_Resources, 
ACE_Thread_Mutex>::instance() (TSS_T.cpp:53)
==31988==    by 0x1BB840A6: TAO_TSS_Resources::instance() 
(TSS_Resources.cpp:44)
==31988==    by 0x1BB3D526: TAO_ORB_Core::gui_resource_factory() 
(ORB_Core.cpp:1508)
==31988==    by 0x1BB25D10: TAO_Leader_Follower::reactor() 
(Leader_Follower.cpp:135)
==31988==    by 0x1BB3DDF4: TAO_ORB_Core::reactor() (ORB_Core.cpp:2826)
==31988==    by 0x1BB47E10: TAO_ORB_Core::init(int&, char**) 
(ORB_Core.cpp:1144)
==31988==    by 0x1BB3AF72: CORBA::ORB_init(int&, char**, char const*) 
(ORB.cpp:1350)
==31988==    by 0x805EB68: main (lpgame_server.cpp:22)
==31988==
==31988== LEAK SUMMARY:
==31988==    definitely lost: 185 bytes in 3 blocks.
==31988==      possibly lost: 72 bytes in 1 blocks.
==31988==    still reachable: 149 bytes in 7 blocks.
==31988==         suppressed: 0 bytes in 0 blocks.
==31988== Reachable blocks (those to which a pointer was found) are not 
shown.
==31988== To see them, rerun with: --show-reachable=yes


Thanks,
Friedhelm

Johnny Willemsen wrote:
> Hi,
> 
> What is the exact svn number that you are using. This should be fixed on the
> head version of today, see bugzilla 3108. This memory leak does exist in TAO
> 1.6.1 and 1.6.0.
> 
> Regards,
> 
> Johnny Willemsen
> Remedy IT
> Postbus 101
> 2650 AC  Berkel en Rodenrijs
> The Netherlands
> www.theaceorb.nl / www.remedy.nl  
> 
> *** Integrated compile and test statistics see
> http://scoreboard.theaceorb.nl ***
> *** Commercial service and support for ACE/TAO/CIAO             ***
> *** See http://www.theaceorb.nl/en/support.html                 ***
> 
>>      TAO VERSION : svn head
>>      ACE VERSION : svn head
>>
>>      HOST/TARGET MACHINE and OPERATING SYSTEM:
>>      Linux tango.dre.vanderbilt.edu 2.6.10 #1 SMP
>> 	Sat Jan 1 17:55:41 CST 2005 i686 GNU/Linux
>>
>>      COMPILER NAME AND VERSION (AND PATCHLEVEL):
>>      gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
>>
>>      CONTENTS OF $ACE_ROOT/ace/config.h
>>      #include <ace/config-linux.h>
>>
>>      CONTENTS OF $ACE_ROOT/include/makeinclude/platform_macros.GNU
>>      include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
>>
>>      CONTENTS OF 
>> $ACE_ROOT/bin/MakeProjectCreator/config/default.features:
>>      n/a
>>
>>      LEVEL OF URGENCY (LOW, MEDIUM, or HIGH):
>>      LOW
>>
>>      AREA/CLASS/EXAMPLE AFFECTED:
>>      thread-per-connection model
>>
>>      DOES THE PROBLEM AFFECT:
>> 	execution / memory management
>>
>>      SYNOPSIS:
>> 	memory leak with thread-per-connection model
>>
>>      DESCRIPTION:
>>
>> Hi there,
>>
>> I implemented a standard CORBA application, consisting of a 
>> client and a
>> server. When I check the server with valgrind in the default 
>> configuration
>> there is no memory leak.
>> As soon as I add a svc.conf file with the following content:
>>
>> static Server_Strategy_Factory "-ORBConcurrency thread-per-connection"
>>
>> valgrind indicates, that there are memory leaks. (see attached file)
>> Is this a bug in TAO?
>>
>> Thanks,
>> Friedhelm
>>



More information about the Ace-users mailing list