On Fri, 13 Nov 2009, Pritpal Bedi wrote:
Hi
> Viktor Szakáts wrote:
> > Now I'm getting crash on exit using MinGW + Win7.
> demoxbp.exe ?
> And crash at what point? On exit ? If yes, then it is possibly that
> HbDbfModel::~HbDbfModel( void )
> {
> hb_itemRelease( block );
> destroy();
> }
> needs some overhaul. What I think is that - hb_itemRelease( block ); -
> has to be guarded in someway, but what, I am unable to figure out.
> Przemek can shed light on this aspect.
I think that it's enough if you look at this code more carefully ;-)
This valgrind log should help you.
==8925== Invalid read of size 8
==8925== at 0x75D5930: hb_xRefDec (fm.c:840)
==8925== by 0x75D75F5: hb_gcRefFree (garbage.c:313)
==8925== by 0x75D76FF: hb_itemRelease (itemapi.c:174)
==8925== by 0x4568F0: HbDbfModel::~HbDbfModel() (hbqt_slots.cpp:2475)
==8925== by 0x7605406: hb_vmProc (hvm.c:5732)
==8925== by 0x75E19C1: hb_vmExecute (hvm.c:1619)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x75E1DA9: hb_vmExecute (hvm.c:1651)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x75E1DA9: hb_vmExecute (hvm.c:1651)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x7604100: hb_arrayEval (arrays.c:1329)
==8925== by 0x75CE70F: HB_FUN_AEVAL (arrayshb.c:372)
==8925== by 0x7605406: hb_vmProc (hvm.c:5732)
==8925== by 0x75E19C1: hb_vmExecute (hvm.c:1619)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== Address 0xc18e500 is 0 bytes inside a block of size 72 free'd
==8925== at 0x4C23DD8: free (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==8925== by 0x75D76FF: hb_itemRelease (itemapi.c:174)
==8925== by 0x4568E7: HbDbfModel::~HbDbfModel() (hbqt_slots.cpp:2292)
==8925== by 0x7605406: hb_vmProc (hvm.c:5732)
==8925== by 0x75E19C1: hb_vmExecute (hvm.c:1619)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x75E1DA9: hb_vmExecute (hvm.c:1651)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x75E1DA9: hb_vmExecute (hvm.c:1651)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x7604100: hb_arrayEval (arrays.c:1329)
==8925== by 0x75CE70F: HB_FUN_AEVAL (arrayshb.c:372)
==8925== by 0x7605406: hb_vmProc (hvm.c:5732)
==8925== by 0x75E19C1: hb_vmExecute (hvm.c:1619)
==8925== by 0x75E414A: hb_vmSend (hvm.c:5880)
==8925== by 0x75E1DA9: hb_vmExecute (hvm.c:1651)
HbDbfModel::~HbDbfModel( void )
{
hb_itemRelease( block ); // hbqt_slots.cpp:2292
destroy();
}
void HbDbfModel::destroy()
{
hb_itemRelease( block ); // hbqt_slots.cpp:2475
}
As you can see this code calls explicitly hb_itemRelease( block ) twice
and it causes memory corruption.
best regards,
Przemek
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour