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) Harbour@harbour-project.org http://lists.harbour-project.org/mailman/listinfo/harbour