Discussion:
[omniORB] Memory leak?
Alfonso Acosta Gomez
2009-03-25 21:48:39 UTC
Permalink
Hi,

Valgrind suggests there's a memory leak in omniORB's initialise_poa()
function. Is this right? I'm running omniORB 4.1.0

The code of MISCcorba::getRootPOA() (MISCcorba.C:496) is simply:

try {
CORBA::Object_ptr obj =
m_orb->resolve_initial_references("RootPOA");
m_poa = PortableServer::POA::_narrow(obj);
CORBA::release(obj);
}
// catching blocks skipped
return m_poa

Here's Valgrind's output.


44 (40 direct, 4 indirect) bytes in 1 blocks are definitely lost in
loss record 128 of 212
at 0x4021B38: malloc (vg_replace_malloc.c:207)
by 0x43C4F1E: operator new(unsigned int) (new.C:16)
by 0x46D6245: initialise_poa()
(in /opt/omniORB_4.1.0/lib/libomniORB4.so.1)
by 0x46D66AD: omni::omniOrbPOA::rootPOA(int)
(in /opt/omniORB_4.1.0/lib/libomniORB4.so.1)
by 0x46D66ED: omni::resolveRootPOAFn()
(in /opt/omniORB_4.1.0/lib/libomniORB4.so.1)
by 0x469EE96: omni::omniInitialReferences::resolve(char const*,
unsigned int) (in /opt/omniORB_4.1.0/lib/libomniORB4.so.1)
by 0x4686E17: omniOrbORB::resolve_initial_references(char const*)
(in /opt/omniORB_4.1.0/lib/libomniORB4.so.1)
by 0x42DCBEE: MISCcorba::getRootPOA() (MISCcorba.C:496)
by 0x42DD18A: MISCcorba::activatePOAManager() (MISCcorba.C:580)
by 0x42DD1CE: MISCcorba::startEventLoop(void (*)(void*), void*)
(MISCcorba.C:1529)
by 0x42E7AA7: MISCloop_Thr (MISCcorba.C:107)
by 0x44902AA: start_thread (in /lib/libpthread-2.4.so)
by 0x4BABA4D: clone (in /lib/libc-2.4.so)

______________________
Este mensaje, y en su caso, cualquier fichero anexo al mismo,
puede contener informacion clasificada por su emisor como confidencial
en el marco de su Sistema de Gestion de Seguridad de la
Informacion siendo para uso exclusivo del destinatario, quedando
prohibida su divulgacion copia o distribucion a terceros sin la
autorizacion expresa del remitente. Si Vd. ha recibido este mensaje
erroneamente, se ruega lo notifique al remitente y proceda a su borrado.
Gracias por su colaboracion.
______________________
This message including any attachments may contain confidential
information, according to our Information Security Management System,
and intended solely for a specific individual to whom they are addressed.
Any unauthorised copy, disclosure or distribution of this message
is strictly forbidden. If you have received this transmission in error,
please notify the sender immediately and delete it.
______________________
Duncan Grisby
2009-03-26 21:56:11 UTC
Permalink
Post by Alfonso Acosta Gomez
Valgrind suggests there's a memory leak in omniORB's initialise_poa()
function. Is this right? I'm running omniORB 4.1.0
try {
CORBA::Object_ptr obj =
m_orb->resolve_initial_references("RootPOA");
m_poa = PortableServer::POA::_narrow(obj);
CORBA::release(obj);
}
// catching blocks skipped
return m_poa
That code fragment looks correct, but it's returning the POA
reference. What does the caller do with it?

Do you call destroy() on the Root POA? If not, it's definitely going to
leak.

Cheers,

Duncan.
--
-- Duncan Grisby --
-- ***@grisby.org --
-- http://www.grisby.org --
Loading...