Thanks very much for you suggestion . Although we are using headerLink
in our code  ,the problem seems to be the way we are calling it .In
our code we are  looking  for hdrVec, a globally exported virtual
function table and finding the functions we need by absolute offset.
This is working till rpm 4.4 ,because this way is not exposed for
later versions and  we can call the method directly, we have made
corresponding changes in our code . After handling this scenario
things seems to be working fine and our basic test case results are
positive.

Thanks for the help .

Thanks,
DP Rajasekhar


On Thu, Jun 14, 2012 at 5:24 PM, Jeffrey Johnson <n3...@me.com> wrote:
>
> On Jun 14, 2012, at 6:49 AM, Rajasekhar wrote:
>
>> The rpm version we are using is 4.8 and platform is RHEL6 and the
>> valgrind output is attached. This issue we are observing only we have
>> two kernels already installed  already on the machine and with one
>> kernel the transaction going just fine .
>>
>>
>
> This is where the problem is:
>
> ==21323== 1 errors in context 2 of 214:
> ==21323== Invalid read of size 8
> ==21323==    at 0x33222177FA: findEntry (header.c:706)
> ==21323==    by 0x3322219BB2: intGetTdEntry (header.c:1300)
> ==21323==    by 0x33222175BA: headerGet (header.c:1337)
> ==21323==    by 0x4C488E3: headerGetEntryWrapper (rc-rpmman.c:3302)
> ==21323==    by 0x4C495E8: rc_rpmman_read_header (rc-rpmman.c:1882)
> ==21323==    by 0x4C4C10D: rc_rpmman_query (rc-rpmman.c:2321)
> ==21323==    by 0x4C4DEE6: rc_rpmman_transact (rc-rpmman.c:1333)
> ==21323==    by 0x4033ED: ??? (in /opt/novell/zenworks/lib/zmd/transact)
> ==21323==    by 0x4038E2: main (in /opt/novell/zenworks/lib/zmd/transact)
> ==21323==  Address 0x507cf98 is 8 bytes inside a block of size 40 free'd
> ==21323==    at 0x4A04D72: free (vg_replace_malloc.c:325)
> ==21323==    by 0x3322618438: rfree (rpmmalloc.c:78)
> ==21323==    by 0x332221DC83: miFreeHeader (rpmdb.c:1541)
> ==21323==    by 0x332221E9AD: rpmdbNextIterator (rpmdb.c:2064)
> ==21323==    by 0x4C4BC59: rc_rpmman_find_system_headers (rc-rpmman.c:713)
> -----------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> ==21323==    by 0x4C4C0C6: rc_rpmman_query (rc-rpmman.c:2312)
> ==21323==    by 0x4C4DEE6: rc_rpmman_transact (rc-rpmman.c:1333)
> ==21323==    by 0x4033ED: ??? (in /opt/novell/zenworks/lib/zmd/transact)
> ==21323==    by 0x4038E2: main (in /opt/novell/zenworks/lib/zmd/transact)
>
> The Header object returned from rpmdbNextIterator is refcounted data.
>
> You are (likely, I can't see the code) using the header object outside the
> scope of an iterator.
>
> Make sure that you do something like
>         myheader = headerLink(h);
> if you want to use a header outside of the scope of an iterator.
>
> You walso need to release the reference somewhere
>        (void) headerFree(myheader);
> or you WILL have a memory leak.
>
> Note that all data retrieved through headerGet() implicitly relies
> on the reference count of the underlying header: the pointers
> to header tag data are all within the header object.
>
> hth
>
> 73 de Jeff
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> Developer Communication List                        rpm-devel@rpm5.org
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to