I have a full core , and libumem does not show us the corruption by
::umem_status 

# mdb core.2033
Loading modules: [ ld.so.1 libumem.so.1 libc.so.1 libuutil.so.1 ]
> ::umem_verify
Cache Name                      Addr             Cache Integrity
umem_magazine_1                           4e6028 clean
umem_magazine_3                           4e6468 clean
umem_magazine_7                           4e68a8 clean
umem_magazine_15                          4e9028 clean
umem_magazine_31                          4e9468 clean
umem_magazine_47                          4e98a8 clean
umem_magazine_63                          4ea028 clean
umem_magazine_95                          4ea468 clean
umem_magazine_143                         4ea8a8 clean
umem_slab_cache                           4ed028 clean
umem_bufctl_cache                         4ed468 clean
umem_bufctl_audit_cache                   4ed8a8 clean
umem_alloc_8                              4ef028 clean
umem_alloc_16                             4ef468 clean
umem_alloc_32                             4ef8a8 clean
umem_alloc_48                             4f3028 clean
umem_alloc_64                             4f3468 clean
umem_alloc_80                             4f38a8 clean
umem_alloc_96                             4f6028 clean
umem_alloc_112                            4f6468 clean
umem_alloc_128                            4f68a8 clean
umem_alloc_160                            4f8028 clean
umem_alloc_192                            4f8468 clean
umem_alloc_224                            4f88a8 clean
umem_alloc_256                            4fb028 clean
umem_alloc_320                            4fb468 clean
umem_alloc_384                            4fb8a8 clean
umem_alloc_448                            4fe028 clean
umem_alloc_512                            4fe468 clean
umem_alloc_640                            4fe8a8 clean
umem_alloc_768                            500028 clean
umem_alloc_896                            500468 clean
umem_alloc_1152                           5008a8 clean
umem_alloc_1344                           503028 clean
umem_alloc_1600                           503468 clean
umem_alloc_2048                           5038a8 clean
umem_alloc_2688                           506028 clean
umem_alloc_4096                           506468 clean
umem_alloc_8192                           5068a8 clean
umem_alloc_12288                          508028 clean
umem_alloc_16384                          508468 clean
>  ::umem_status
Status:         ready and active
Concurrency:    8
Logs:           transaction=128k content=128k
Message buffer:

> $C
fffffd7fffdea360 libc.so.1`strlen+0x40()
fffffd7fffdea4c0 libc.so.1`sprintf+0xcd()
fffffd7fffdea8e0 libsig.so`_Z14sighdl_getpathv+0x59()
fffffd7fffdead20 libsig.so`_Z11sighdl_corev+0x49()
fffffd7fffdead50 libsig.so`_Z14sighdl_handleri+0xb5()
fffffd7fffdead60 libc.so.1`__sighndlr+6()
fffffd7fffdeadd0 libc.so.1`call_user_handler+0x252()
fffffd7fffdeae00 libc.so.1`sigacthandler+0xde(b, 0, fffffd7fffdeae20)
fffffd7fffdeb260
libstdc++.so.6.0.8`_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base+0xa()
fffffd7fffdeb300
libSoapBaseO.so`_ZNSt8_Rb_treeISsSt4pairIKSs14XdmHomeDnCacheESt10_Select
1stIS3_ESt4lessISsESaIS3_EE13insert_uniqueESt17_Rb_tr
ee_iteratorIS3_ERKS3_+0x28f()



 


Thanks!
Valdemar


-----Original Message-----
From: ext James Carlson [mailto:james.d.carl...@sun.com] 
Sent: Tuesday, March 17, 2009 12:18 PM
To: Pavesi, Valdemar (NSN - US/Boca Raton)
Cc: mdb-discuss at opensolaris.org
Subject: RE: [mdb-discuss] How can libumem detect that a global variable
wasdeleted?

[You might want to take this off-list.]

Pavesi, Valdemar (NSN - US/Boca Raton) writes:
> My problem was the global variable gHomeDnCacheList that was deleted.

Global variables can't "deleted," except by removing the definition
from the source code itself.

At a guess, what you mean is that the storage pointed to by your
global variable was freed, which is quite a different thing.
libumem's auditing mechanism can tell you where and when it was freed.

> I
> saw a lot of corruptions that was detected by libumem.
> I was just trying to understand why it cannot be detected by libumem
> ,but now it is clear.

I don't understand.  Are you saying that libumem detected problems or
that it didn't detect them?  The above seems to say both.

It is able to detect corrupted memory, but:

  (a) It doesn't know whether having a global pointing to freed
      storage is by design or a mistake (not everyone clears things to
      NULL after freeing), so that alone won't trigger any report from
      libumem or mdb.

  (b) Depending on the corruption you encounter, it may be quite
      difficult to relate it back to an actual cause.  Memory
      corruption is like that.

> I am trying to use  watchmalloc.so.1

I don't understand this, either.  Watchmalloc and libumem are *both*
replacement implementations of the dynamic memory allocator.  You
can't use both at the same time.

-- 
James Carlson, Solaris Networking              <james.d.carlson at sun.com>
Sun Microsystems / 35 Network Drive        71.232W   Vox +1 781 442 2084
MS UBUR02-212 / Burlington MA 01803-2757   42.496N   Fax +1 781 442 1677

Reply via email to