On Wed, 26 Dec 2007, Vamsee Priya wrote:

> Hi,
>
>> From the umem_status I too agree that some thing in my program corrupted
> the memory. I am working on as to what caused the problem. The same
> program works fine always in "SPARC" platform. Why is it that it is
> causing problems on x86 architecture only?

There are differences between CPU architectures that go beyond "this is 
32bit this is 64bit". Again, data structure alignment/padding rules and 
operand sizes come to mind.

Have you ever run your program on SPARC with libumem/UMEM_DEBUG ? It might 
well fail in the same way (under memory debugging). As said, whether a bug 
such as this causes a program failure or not "depends" - on how lucky you 
are :)

>From the stacktraces you have, the function active_out() is the place to 
look. You allocate a piece of memory there, do something with it and in 
the process of that overwrite the buffer beyond its end, and then you try 
to free it. That's when libumem tells you "oh no, not with me ... I know 
what you did ...".

FrankH.

>
> Thanks
> Priya
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
> Of [EMAIL PROTECTED]
> Sent: Wednesday, December 26, 2007 6:36 PM
> To: Vamsee Priya
> Cc: opensolaris-discuss@opensolaris.org
> Subject: Re: [osol-discuss] SIGSEGV in libc.so.1`_malloc_unlocked
> onSolarisx86machine
>
>
>
>> This is the o/p I get with umem_status when I attach mdb to the process
>> running.
>>
>> Status:         ready and active
>> Concurrency:    0
>> Logs:           (inactive)
>> Message buffer:
>> umem allocator: redzone violation: write past end of buffer
>> buffer=80c7c68  bufctl=80c8ce8  cache: umem_alloc_80
>
> This error basically says: you have allocated an "X" (<= 80 bytes) of
> memory but you wrote more than 80 bytes in that buffer.
>
> The buffer was allocated from this point in your application:
>
>> previous transaction on buffer 80c7c68:
>> thread=1  time=T-0.000415973  slab=80b8ed8  cache: umem_alloc_80
>> libumem.so.1'?? (0xfef99a48)
>> libumem.so.1'umem_cache_alloc+0xe1
>> libumem.so.1'umem_alloc+0x3f
>> libumem.so.1'malloc+0x23
>> ipfs_diff.exe'get_meta+0x28e            <--- here
>> ipfs_diff.exe'active_out+0xb5
>> ipfs_diff.exe'active+0xe0
>> ipfs_diff.exe'main+0xd59
>> ipfs_diff.exe'_start+0x80
>
>
> And was freed here at which point the corruption was detected.
>
>> umem: heap corruption detected
>> stack trace:
>> libumem.so.1'?? (0xfef96099)
>> libumem.so.1'?? (0xfef98b1c)
>> libumem.so.1'umem_free+0xf6
>> libumem.so.1'?? (0xfef97c05)
>> libumem.so.1'free+0x14
>> ipfs_diff.exe'meta_free+0xbf
>> ipfs_diff.exe'active_out+0x44e
>> ipfs_diff.exe'active+0xe0
>> ipfs_diff.exe'main+0xd59
>> ipfs_diff.exe'_start+0x80
>
> You could look at the buffer (+ 0t80) and see what was written there.
>
> Casper
>
>
>
>
> _______________________________________________
> opensolaris-discuss mailing list
> opensolaris-discuss@opensolaris.org
>
_______________________________________________
opensolaris-discuss mailing list
opensolaris-discuss@opensolaris.org

Reply via email to