[Trilinos-Users] SerialComm bug?
Nico Schlömer
nico.schloemer at ua.ac.be
Fri Oct 15 06:26:37 MDT 2010
Hi,
I just compiled my own code against a DEBUG installation of Trilinos,
and every time Teuchos warns me about about and RCP to an
Epetra_SerialComm which couldn't be destroyed properly.
Turns out that creating one and exit() already yields the same warning; bug?
Example code is attached.
Linking this again a DEBUG build gives
================== *snip* ==================
***
*** Warning! The following Teuchos::RCPNode objects were created but have
*** not been destroyed yet. A memory checking tool may complain that these
*** objects are not destroyed correctly.
***
*** There can be many possible reasons that this might occur including:
***
*** a) The program called abort() or exit() before main() was finished.
*** All of the objects that would have been freed through destructors
*** are not freed but some compilers (e.g. GCC) will still call the
*** destructors on static objects (which is what causes this message
*** to be printed).
***
*** b) The program is using raw new/delete to manage some objects and
*** delete was not called correctly and the objects not deleted hold
*** other objects through reference-counted pointers.
***
*** c) This may be an indication that these objects may be involved in
*** a circular dependency of reference-counted managed objects.
***
0: RCPNode (map_key_void_ptr=0x18cbf40)
Information = {T=Epetra_SerialComm, ConcreteT=Epetra_SerialComm,
p=0x18cbf40, has_ownership=1}
RCPNode address = 0x18cbfb0
insertionNumber = 0
NOTE: To debug issues, open a debugger, and set a break point in the
function where
the RCPNode object is first created to determine the context where the
object first
gets created. Each RCPNode object is given a unique insertionNumber to
allow setting
breakpoints in the code. For example, in GDB one can perform:
1) Open the debugger (GDB) and run the program again to get updated
object addresses
2) Set a breakpoint in the RCPNode insertion routine when the desired
RCPNode is first
inserted. In GDB, to break when the RCPNode with insertionNumber==3 is
added, do:
(gdb) b 'Teuchos::RCPNodeTracer::addNewRCPNode( [TAB] [ENTER]
(gdb) cond 1 insertionNumber==3 [ENTER]
3) Run the program in the debugger. In GDB, do:
(gdb) run [ENTER]
4) Examine the call stack when the prgoram breaks in the function
addNewRCPNode(...)
================== *snap* ==================
on my machine.
Cheers,
Nico
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 2010-10-15-serialfail.tar.bz2
Type: application/x-bzip2
Size: 881 bytes
Desc: not available
Url : https://software.sandia.gov/pipermail/trilinos-users/attachments/20101015/cb71fdfe/attachment.bz2
More information about the Trilinos-Users
mailing list