[Ace-users] [ace-users] tao ssliop memory leaks

Johnny Willemsen jwillemsen at remedy.nl
Tue Dec 4 01:15:57 CST 2007


Hi,

Make sure you get the svn version, we fixed a structural leak in TAO after
x.6.1.

Johnny 

> -----Original Message-----
> From: ace-users-bounces at cse.wustl.edu 
> [mailto:ace-users-bounces at cse.wustl.edu] On Behalf Of Douglas 
> C. Schmidt
> Sent: Tuesday, December 04, 2007 4:07 AM
> To: swara101 at yahoo.com; ace-users at cse.wustl.edu
> Subject: Re: [ace-users] tao ssliop memory leaks
> 
> Hi,
> 
>         Thanks for the update.  Can you please clarify which 
> version of
> TAO you're working with?
> 
> Thanks,
> 
>         Doug
> 
> >There looks several memory problems with TAO SSLIOP implementation. I
> >found at least one bug (that leaks a lot):
> >
> >  ........removed some code to avoid the clutter...........
> >
> > if (!ssl_endpoint->credentials_set ())
> >  {
> >
> >      if (this->base_connector_.creation_strategy 
> ()->make_svc_handler
> >(
> >               svc_handler) != 0)
> >        {
> >          return 0;
> >        }
> >
> >      ACE_Auto_Basic_Ptr<TAO::SSLIOP::Connection_Handler>
> >        safe_handler (svc_handler);
> >      TAO::SSLIOP::OwnCredentials_var credentials =
> >        this->retrieve_credentials (resolver->stub (),
> >                                    svc_handler->peer ().ssl ());
> >
> >      svc_handler = safe_handler.release ();
> >      /// svc_handler is being retained
> >
> >      ssl_endpoint->set_sec_attrs (qop, trust, credentials.in());
> >    }
> >
> >  // Check the Cache first for connections
> >  if (this->orb_core ()->lane_resources ().transport_cache
> >().find_transport (
> >        desc,
> >        transport) == 0)
> >    {
> >
> >    ............. In this block  svc_handler is not released....hence
> >memory leak....
> >     ....add this line to avoid the memory leaks.....
> >        ACE_Auto_Basic_Ptr<TAO::SSLIOP::Connection_Handler>
> >            safe_handler (svc_handler);
> >
> >      // When the transport is not connected wait for completion
> >      if (!transport->is_connected())
> >        {
> >          if (!this->wait_for_connection_completion (resolver,
> >                                                     transport,
> >                                                     max_wait_time))
> >            {
> >
> >            }
> >        }
> >    }
> >
> >
> >Actually, I have an issue with the above implementation. I've an
> >application in which client receives a new Object Reference from the
> >server. This happens many a million times over the lifetime. Every
> >invocation on a new object reference from the client causes the
> >execution of the following block:
> >
> >    if (!ssl_endpoint->credentials_set ()) {
> >              .....
> >    }
> >
> >Above memory leak gets exaspareted. I'm wondering about more 
> efficient
> >implementation of this block, as it seems merely setting the
> >credentials for the end poing of the object reference. Once a
> >transport connection is established, the svc_handler gets destroyed.
> >It's creation is very expensive. Is there any simple way of setting
> >the credentials for an object reference when a transport connection
> >that can satisfy the credentials already exist?
> >
> >Thanks
> >Venkat
> >
> >PS: btw, there seem many other memory problems in the presence of
> >connection failures and re-establish. I'm yet to explore this. Any
> >ideas that could help?
> >
> >On Nov 30, 11:51 am, "Johnny Willemsen" <jwillem... at remedy.nl> wrote:
> >> Hi,
> >>
> >> Thanks for using the PRF form. We have identified a few 
> weeks ago a memory
> >> leak in TAO, that has been fixed and will be in the 
> upcoming x.6.2 version
> >> of TAO. Maybe you can try svn head, see ACE-INSTALL.html 
> and the TAO
> >> Programmers Guide to acquire that one. Maybe your leaks in 
> SSLIOP are the
> >> same, maybe they are different.
> >>
> >> Regards,
> >>
> >> Johnny Willemsen
> >> Remedy IT
> >> Postbus 101
> >> 2650 AC  Berkel en Rodenrijs
> >> The Netherlandswww.theaceorb.nl/www.remedy.nl
> >>
> >> *** Integrated compile and test statistics 
> seehttp://scoreboard.theaceorb.nl***
> >> *** Commercial service and support for ACE/TAO/CIAO             ***
> >> *** Seehttp://www.theaceorb.nl/en/support.html                ***
> >>
> >> "Venkat" <swara... at yahoo.com> wrote in message
> >>
> >> 
> <news:e166681a-7014-48b6-a1ad-074ad11aa1e4 at a39g2000pre.googleg
roups.com>...
> >>
> >> > Hello TAO team,
> >>
> >> >    TAO VERSION: 1.6.1
> >> >     ACE VERSION: 5.6.1
> >>
> >> >     HOST MACHINE and OPERATING SYSTEM:
> >> >          Solaris 10, i386
> >>
> >> >     TARGET MACHINE and OPERATING SYSTEM, if different from HOST:
> >> >     COMPILER NAME AND VERSION (AND PATCHLEVEL):
> >> >              Solaris 10, i386
> >>
> >> >     THE $ACE_ROOT/ace/config.h FILE [if you use a link 
> to a platform-
> >> >     specific file, simply state which one]:
> >> >              generation via autoconf
> >>
> >> >     THE 
> $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE [if you
> >> >     use a link to a platform-specific file, simply state 
> which one
> >> >     (unless this isn't used in this case, e.g., with 
> Microsoft Visual
> >> >     C++)]:
> >> >           n/a
> >>
> >> >     CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/
> >> > default.features
> >> >     (used by MPC when you generate your own makefiles):
> >> >              ssl
> >>
> >> >     AREA/CLASS/EXAMPLE AFFECTED:
> >>
> >> >     DOES THE PROBLEM AFFECT:
> >> >         COMPILATION? no
> >> >         LINKING? no
> >> >         EXECUTION? Yes
> >>
> >> >     SYNOPSIS:
> >> >         Memory leaks in TAO::SSLIOP codebase
> >>
> >> >     DESCRIPTION:
> >> >         Client and Server on different nodes with SSLIOP 
> enabled. As
> >> > Server is processing requests, memory is growing.
> >>
> >> >         I ran memory detector tool, and finding leaks as 
> shown below.
> >> > Pls. let me know why those are shown as leaks, and what 
> would be the
> >> > cause?
> >>
> >> > libumem.so.1`umem_cache_alloc_debug+0x12b
> >> >                  libumem.so.1`umem_cache_alloc+0xc8
> >> >                  libumem.so.1`umem_alloc+0xaf
> >> >                  libumem.so.1`malloc+0x2e
> >> >                  libCrun.so.1`void*operator new(unsigned 
> long,const
> >> > std::nothrow_t&)+0x28
> >> > libTAO.so.
> >>
> >> 
> 1.6.1`TAO_Wait_Strategy*TAO_Default_Client_Strategy_Factory::c
> reate_wait_str
> >> ategy(TAO_Transport*)> +0x2c1
> >> >                  libTAO.so.1.6.1`TAO_Transport::TAO_Transport
> >> > #Nvariant 1(unsigned,TAO_ORB_Core*,unsigned long)+0x438
> >> >                  libTAO_SSLIOP.so.
> >> > 1.6.1`TAO::SSLIOP::Transport::Transport #Nvariant
> >> > 1(TAO::SSLIOP::Connection_Handler*,TAO_ORB_Core*)+0x4f
> >> >                  libTAO_SSLIOP.so.
> >> > 
> 1.6.1`TAO::SSLIOP::Connection_Handler::Connection_Handler #Nvariant
> >> > 1(TAO_ORB_Core*)+0x1bb
> >> >                  libTAO_SSLIOP.so.1.6.1`int
> >>
> >> 
> TAO_Connect_Creation_Strategy<TAO::SSLIOP::Connection_Handler>
> ::make_svc_han
> >> dler(TAO::SSLIOP::Connection_Handler*&)> +0x9c
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::ssliop_connect(TAO
> _SSLIOP_Endpoi
> >> nt*,Security::QOP,const
> >>
> >> 
> Security::EstablishTrust&,TAO::Profile_Transport_Resolver*,TAO
> _Transport_Des
> >> criptor_Interface*,ACE_Time_Value*)> +0x331
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::connect(TAO::Profi
> le_Transport_R
> >> 
> esolver*,TAO_Transport_Descriptor_Interface*,ACE_Time_Value*)> +0x979
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_D
> escriptor_Inte
> >> rface*,ACE_Time_Value*,bool)> +0x278
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect(TAO_Transport_Des
> criptor_Interf
> >> ace*,ACE_Time_Value*)> +0x32
> >>
> >> >                  libTAO.so.1.6.1`void
> >>
> >> 
> TAO_Default_Endpoint_Selector::select_endpoint(TAO::Profile_Tr
> ansport_Resolv
> >> er*,ACE_Time_Value*)
> >>
> >> > +0x261
> >>
> >> >      libumem.so.1`umem_cache_alloc_debug+0x12b
> >> >                  libumem.so.1`umem_cache_alloc+0xc8
> >> >                  libumem.so.1`umem_alloc+0xaf
> >> >                  libumem.so.1`malloc+0x2e
> >> >                  libCrun.so.1`void*operator new(unsigned 
> long,const
> >> > std::nothrow_t&)+0x28
> >>
> >> >                  libTAO_SSLIOP.so.
> >> > 1.6.1`ACE_Task<ACE_NULL_SYNCH>::ACE_Task #Nvariant
> >> > 1(ACE_Thread_Manager*,ACE_Message_Queue<ACE_NULL_SYNCH>*)+0x127
> >>
> >> >                  libTAO_SSLIOP.so.
> >> > 
> 1.6.1`ACE_Svc_Handler<ACE_SSL_SOCK_Stream,ACE_NULL_SYNCH>::ACE
> _Svc_Handler
> >> > #Nvariant
> >> > 
> 1(ACE_Thread_Manager*,ACE_Message_Queue<ACE_NULL_SYNCH>*,ACE_Reactor*)
> >> > +0x5b
> >> >                  libTAO_SSLIOP.so.
> >> > 
> 1.6.1`TAO::SSLIOP::Connection_Handler::Connection_Handler #Nvariant
> >> > 1(TAO_ORB_Core*)+0xa2
> >> > libTAO_SSLIOP.so.1.6.1`int
> >>
> >> 
> TAO_Connect_Creation_Strategy<TAO::SSLIOP::Connection_Handler>
> ::make_svc_han
> >> dler(TAO::SSLIOP::Connection_Handler*&)> +0x9c
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::ssliop_connect(TAO
> _SSLIOP_Endpoi
> >> nt*,Security::QOP,const
> >>
> >> 
> Security::EstablishTrust&,TAO::Profile_Transport_Resolver*,TAO
> _Transport_Des
> >> criptor_Interface*,ACE_Time_Value*)> +0x331
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::connect(TAO::Profi
> le_Transport_R
> >> 
> esolver*,TAO_Transport_Descriptor_Interface*,ACE_Time_Value*)> +0x979
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_D
> escriptor_Inte
> >> rface*,ACE_Time_Value*,bool)> +0x278
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect(TAO_Transport_Des
> criptor_Interf
> >> ace*,ACE_Time_Value*)> +0x32
> >>
> >> >                  libTAO.so.1.6.1`void
> >>
> >> 
> TAO_Default_Endpoint_Selector::select_endpoint(TAO::Profile_Tr
> ansport_Resolv
> >> er*,ACE_Time_Value*)> +0x261
> >> >                  libTAO.so.1.6.1`void
> >> > TAO::Profile_Transport_Resolver::resolve(ACE_Time_Value*)+0xb3
> >> >  libumem.so.1`umem_cache_alloc_debug+0x12b
> >> >                  libumem.so.1`umem_cache_alloc+0xc8
> >> >                  libumem.so.1`umem_alloc+0xaf
> >> >                  libumem.so.1`malloc+0x2e
> >> >                  libCrun.so.1`void*operator new(unsigned 
> long,const
> >> > std::nothrow_t&)+0x28
> >> >                  libTAO.so.
> >>
> >> 
> 1.6.1`ACE_Lock*TAO_Default_Resource_Factory::create_cached_con
> nection_lock()> +0x121
> >> >                  libTAO.so.1.6.1`TAO_Transport::TAO_Transport
> >> > #Nvariant 1(unsigned,TAO_ORB_Core*,unsigned long)+0x196
> >> >                  libTAO_SSLIOP.so.
> >> > 1.6.1`TAO::SSLIOP::Transport::Transport #Nvariant
> >> > 1(TAO::SSLIOP::Connection_Handler*,TAO_ORB_Core*)+0x4f
> >> >                  libTAO_SSLIOP.so.
> >> > 
> 1.6.1`TAO::SSLIOP::Connection_Handler::Connection_Handler #Nvariant
> >> > 1(TAO_ORB_Core*)+0x1bb
> >>
> >> >                  libTAO_SSLIOP.so.1.6.1`int
> >>
> >> 
> TAO_Connect_Creation_Strategy<TAO::SSLIOP::Connection_Handler>
> ::make_svc_han
> >> dler(TAO::SSLIOP::Connection_Handler*&)> +0x9c
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::ssliop_connect(TAO
> _SSLIOP_Endpoi
> >> nt*,Security::QOP,const
> >>
> >> 
> Security::EstablishTrust&,TAO::Profile_Transport_Resolver*,TAO
> _Transport_Des
> >> criptor_Interface*,ACE_Time_Value*)> +0x331
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::connect(TAO::Profi
> le_Transport_R
> >> 
> esolver*,TAO_Transport_Descriptor_Interface*,ACE_Time_Value*)> +0x979
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_D
> escriptor_Inte
> >> rface*,ACE_Time_Value*,bool)> +0x278
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect(TAO_Transport_Des
> criptor_Interf
> >> ace*,ACE_Time_Value*)> +0x32
> >>
> >> >                  libTAO.so.1.6.1`void
> >>
> >> 
> TAO_Default_Endpoint_Selector::select_endpoint(TAO::Profile_Tr
> ansport_Resolv
> >> er*,ACE_Time_Value*)
> >>
> >> > +0x261
> >>
> >> > libumem.so.1`umem_cache_alloc_debug+0x12b
> >> >                  libumem.so.1`umem_cache_alloc+0xc8
> >> >                  libumem.so.1`umem_alloc+0xaf
> >> >                  libumem.so.1`malloc+0x2e
> >> >                  libCrun.so.1`void*operator new(unsigned 
> long,const
> >> > std::nothrow_t&)+0x28
> >> >                  libTAO.so.1.6.1`TAO_Transport::TAO_Transport
> >> > #Nvariant 1(unsigned,TAO_ORB_Core*,unsigned long)+0x4af
> >> >                  libTAO_SSLIOP.so.
> >> > 1.6.1`TAO::SSLIOP::Transport::Transport #Nvariant
> >> > 1(TAO::SSLIOP::Connection_Handler*,TAO_ORB_Core*)+0x4f
> >> >                  libTAO_SSLIOP.so.
> >> > 
> 1.6.1`TAO::SSLIOP::Connection_Handler::Connection_Handler #Nvariant
> >> > 1(TAO_ORB_Core*)+0x1bb
> >>
> >> >                  libTAO_SSLIOP.so.1.6.1`int
> >>
> >> 
> TAO_Connect_Creation_Strategy<TAO::SSLIOP::Connection_Handler>
> ::make_svc_han
> >> dler(TAO::SSLIOP::Connection_Handler*&)> +0x9c
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::ssliop_connect(TAO
> _SSLIOP_Endpoi
> >> nt*,Security::QOP,const
> >>
> >> 
> Security::EstablishTrust&,TAO::Profile_Transport_Resolver*,TAO
> _Transport_Des
> >> criptor_Interface*,ACE_Time_Value*)> +0x331
> >>
> >> >                  libTAO_SSLIOP.so.
> >>
> >> 
> 1.6.1`TAO_Transport*TAO::SSLIOP::Connector::connect(TAO::Profi
> le_Transport_R
> >> 
> esolver*,TAO_Transport_Descriptor_Interface*,ACE_Time_Value*)> +0x979
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect_i(TAO_Transport_D
> escriptor_Inte
> >> rface*,ACE_Time_Value*,bool)> +0x278
> >>
> >> >                  libTAO.so.1.6.1`bool
> >>
> >> 
> TAO::Profile_Transport_Resolver::try_connect(TAO_Transport_Des
> criptor_Interf
> >> ace*,ACE_Time_Value*)> +0x32
> >>
> >> >                  libTAO.so.1.6.1`void
> >>
> >> 
> TAO_Default_Endpoint_Selector::select_endpoint(TAO::Profile_Tr
> ansport_Resolv
> >> er*,ACE_Time_Value*)
> >>
> >> > +0x261
> >> >                  libTAO.so.1.6.1`void
> >> > TAO::Profile_Transport_Resolver::resolve(ACE_Time_Value*)+0xb3
> >>
> >> >  libumem.so.1`umem_cache_alloc_debug+0x12b
> >> >                  libumem.so.1`umem_cache_alloc+0xc8
> >> >                  libumem.so.1`umem_alloc+0xaf
> >>
> >> ...
> >>
> >> read more >>
> >
> 
> 
> -- 
> Dr. Douglas C. Schmidt                       Professor and 
> Associate Chair
> Electrical Engineering and Computer Science  TEL: (615) 343-8197
> Vanderbilt University                        WEB: 
> www.dre.vanderbilt.edu/~schmidt
> Nashville, TN 37203                          NET: 
> d.schmidt at vanderbilt.edu
> 
> _______________________________________________
> ace-users mailing list
> ace-users at mail.cse.wustl.edu
> http://mail.cse.wustl.edu/mailman/listinfo/ace-users
> 



More information about the Ace-users mailing list