On Mon, 31 Mar 2008, Guy Roussin wrote:
> >You are wrong. Only Harbour have fully working destructors and
> >xHarbour doesn't. The xHarbour implementation is too buggy for
> >serious usage. 
> >Please read docs/destruct.txt and try test code in destruct.prg.
> Fine thank you, i only need to add this to my code :
> class FLaccess
>  ...
>  destructor close
>  ...
> endclass
> ...
> method close() class FLaccess
> fclose(::nHandle)
> return NIL

Such simple example are also safe in xHarbour.
But be careful when you will want to operate on complex data in
xHarbour destructors. The xHarbour's GC is not ready for destructor
.prg code which may change the reference counters in released blocks
or move some complex variables. In general you should try to not
touch any objects or arrays inside destructors in xHarbour.
The tests/destruct.prg code in Harbour SVN repository is also good
example which shows some wrong things which may happen in xHarbour.
Below I'm attaching log file from VALGRIND for destruct.prg compiled
by xHarbour. As you can see internal xHarbour memory structures becomes
corrupted by .prg destructors code. Please also note that xHarbour
can catch it immediately and XHVM still works using pointers to freed
memory blocks what may cause corruptions in other subsystem which
may allocate the same memory region.
Until it will not be fixed in xHarbour I suggest to to use xHarbour
destructors in complex applications because it may cause unpredicitble
errors. The destruct.prg code can be used for tests. If you do not have
VALGRIND then you can make similar test with CodeGuard from BCC.

best regards,
Przemek


==3235== Memcheck, a memory error detector for x86-linux.
==3235== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
==3235== Using valgrind-2.2.0, a program supervision framework for x86-linux.
==3235== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al.
==3235== Valgrind library directory: /usr/lib/valgrind
==3235== Command line
==3235==    ./destruct
==3235== Startup, with flags:
==3235==    --tool=memcheck
==3235==    --leak-check=yes
==3235==    --num-callers=16
==3235==    -v
==3235== Contents of /proc/version:
==3235==   Linux version 2.6.15 ([EMAIL PROTECTED]) (gcc version 3.4.2 20041017 
(Red Hat 3.4.2-6.fc3)) #8 PREEMPT Fri Jun 16 01:11:03 CEST 2006
==3235== Reading syms from /home/druzus/CVS/harbour/harbour/tests/destruct 
(0x8048000)
==3235==    object doesn't have a symbol table
==3235==    object doesn't have any debug info
==3235== Reading syms from /lib/ld-2.3.3.so (0x1B8E4000)
==3235==    object doesn't have any debug info
==3235== Reading syms from /usr/lib/valgrind/stage2 (0xB0000000)
==3235== Reading syms from /lib/ld-2.3.3.so (0xB1000000)
==3235==    object doesn't have any debug info
==3235== Reading syms from /usr/lib/valgrind/vgskin_memcheck.so (0xB7B9B000)
==3235== Reading syms from /lib/tls/libc-2.3.3.so (0xB7DC4000)
==3235==    object doesn't have any debug info
==3235== Reading syms from /lib/libdl-2.3.3.so (0xB7EEC000)
==3235==    object doesn't have any debug info
==3235== Reading suppressions file: /usr/lib/valgrind/default.supp
==3235== REDIRECT soname:libc.so.6(__GI___errno_location) to 
soname:libpthread.so.0(__errno_location)
==3235== REDIRECT soname:libc.so.6(__errno_location) to 
soname:libpthread.so.0(__errno_location)
==3235== REDIRECT soname:libc.so.6(__GI___h_errno_location) to 
soname:libpthread.so.0(__h_errno_location)
==3235== REDIRECT soname:libc.so.6(__h_errno_location) to 
soname:libpthread.so.0(__h_errno_location)
==3235== REDIRECT soname:libc.so.6(__GI___res_state) to 
soname:libpthread.so.0(__res_state)
==3235== REDIRECT soname:libc.so.6(__res_state) to 
soname:libpthread.so.0(__res_state)
==3235== REDIRECT soname:libc.so.6(stpcpy) to *vgpreload_memcheck.so*(stpcpy)
==3235== REDIRECT soname:libc.so.6(strnlen) to *vgpreload_memcheck.so*(strnlen)
==3235== REDIRECT soname:ld-linux.so.2(stpcpy) to 
*vgpreload_memcheck.so*(stpcpy)
==3235== REDIRECT soname:ld-linux.so.2(strchr) to 
*vgpreload_memcheck.so*(strchr)
==3235== 
==3235== Reading syms from /usr/lib/valgrind/vg_inject.so (0x1B8FC000)
==3235== Reading syms from /usr/lib/valgrind/vgpreload_memcheck.so (0x1B901000)
==3235== TRANSLATE: 0x1B8F5A50 redirected to 0x1B90420C
==3235== Reading syms from 
/home/druzus/CVS/xharbour/out/lib/libxharbour-1.1.0.so (0x1B923000)
==3235== Reading syms from /usr/X11R6/lib/libX11.so.6.2 (0x987000)
==3235==    object doesn't have a symbol table
==3235==    object doesn't have any debug info
==3235== Reading syms from /usr/lib/libncurses.so.5.4 (0x58D8000)
==3235== Reading syms from /usr/local/lib/libslang.so.2.0.5 (0x1BC64000)
==3235==    object doesn't have a symbol table
==3235==    object doesn't have any debug info
==3235== Reading syms from /lib/tls/libm-2.3.3.so (0x95C000)
==3235==    object doesn't have any debug info
==3235== Reading syms from /lib/libdl-2.3.3.so (0x981000)
==3235==    object doesn't have any debug info
==3235== Reading syms from /lib/tls/libc-2.3.3.so (0x833000)
==3235==    object doesn't have any debug info
==3235== TRANSLATE: 0x896160 redirected to 0x1B904A04
==3235== TRANSLATE: 0x896610 redirected to 0x1B905432
==3235== TRANSLATE: 0x1B8E47A0 redirected to 0x52BFF040
==3235== TRANSLATE: 0x894430 redirected to 0x1B904F30

First simple tests when object is not destroyed by GC
=====================================================

=> o := myClass():new( 0 )
Hi, I'm INIT method of class: MYCLASS
=> o:className() -> MYCLASS
=> o := NIL
   Hi, I'm desturctor of class:  MYCLASS
   I do not store any references to self.
   It's a safe destructor.

=> o := myClass():new( 1 )
Hi, I'm INIT method of class: MYCLASS
=> o:className() -> MYCLASS
=> o := NIL
   Hi, I'm desturctor of class:  MYCLASS
   I'm storing reference to self in instance variable.
   Bad practice but safe in Harbour because it will be destroyed.

=> o := myClass():new( 2 )
Hi, I'm INIT method of class: MYCLASS
=> o:className() -> MYCLASS
=> o := NIL
   Hi, I'm desturctor of class:  MYCLASS
   I'm storing reference to self in class variable.
   It's programmer bug which should cause RT error.

=> o := myClass():new( 3 )
Hi, I'm INIT method of class: MYCLASS
=> o:className() -> MYCLASS
=> o := NIL
   Hi, I'm desturctor of class:  MYCLASS
   I'm storing reference to self in public variable.
   It's programmer bug which should cause RT error.

Now object will be destroyed by GC
==================================

=> o := myClass():new( 0 )
Hi, I'm INIT method of class: MYCLASS
=> o:className() -> MYCLASS
=> create corss reference: a := { o, nil }; a[2] := a; a := NIL
=> o := NIL
=> hb_gcAll()==3235== Invalid read of size 2
==3235==    at 0x1BA95197: hb_gcItemRef (garbage.c:488)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADA is 18 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== Invalid read of size 4
==3235==    at 0x1BA95293: hb_gcItemRef (garbage.c:490)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73AE0 is 24 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== Invalid write of size 2
==3235==    at 0x1BA95296: hb_gcItemRef (garbage.c:494)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADA is 18 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== Invalid read of size 4
==3235==    at 0x1BA9529F: hb_gcItemRef (garbage.c:497)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADC is 20 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== Invalid read of size 4
==3235==    at 0x1BA95144: hb_gcItemRef (garbage.c:476)
==3235==    by 0x1BA952AF: hb_gcItemRef (garbage.c:503)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3235== 
==3235== Process terminating with default action of signal 11 (SIGSEGV)
==3235==  Access not within mapped region at address 0x0
==3235==    at 0x1BA95144: hb_gcItemRef (garbage.c:476)
==3235==    by 0x1BA952AF: hb_gcItemRef (garbage.c:503)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 20 from 1)
==3235== 
==3235== 1 errors in context 1 of 5:
==3235== Invalid read of size 4
==3235==    at 0x1BA95144: hb_gcItemRef (garbage.c:476)
==3235==    by 0x1BA952AF: hb_gcItemRef (garbage.c:503)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3235== 
==3235== 1 errors in context 2 of 5:
==3235== Invalid read of size 4
==3235==    at 0x1BA9529F: hb_gcItemRef (garbage.c:497)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADC is 20 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== 1 errors in context 3 of 5:
==3235== Invalid write of size 2
==3235==    at 0x1BA95296: hb_gcItemRef (garbage.c:494)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADA is 18 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== 1 errors in context 4 of 5:
==3235== Invalid read of size 4
==3235==    at 0x1BA95293: hb_gcItemRef (garbage.c:490)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73AE0 is 24 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235== 
==3235== 1 errors in context 5 of 5:
==3235== Invalid read of size 2
==3235==    at 0x1BA95197: hb_gcItemRef (garbage.c:488)
==3235==    by 0x1BA94BAF: hb_memvarsIsMemvarRef (memvars.c:2359)
==3235==    by 0x1BA95355: hb_gcCollectAll (garbage.c:662)
==3235==    by 0x1BA956D4: HB_FUN_HB_GCALL (garbage.c:940)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x80489AA: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
==3235==  Address 0x1BD73ADA is 18 bytes inside a block of size 52 free'd
==3235==    at 0x1B904FB1: free (vg_replace_malloc.c:153)
==3235==    by 0x1BABDDA3: hb_arrayRelease (arrays.c:1487)
==3235==    by 0x1BA9E8B4: hb_itemClear (fastitem.c:242)
==3235==    by 0x1BA9E9E4: hb_itemForwardValue (fastitem.c:96)
==3235==    by 0x1BAB0E15: hb_vmPopLocal (hvm.c:9475)
==3235==    by 0x1BAA45BA: hb_vmExecute (hvm.c:3232)
==3235==    by 0x804898C: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BAA372C: hb_vmExecute (hvm.c:1436)
==3235==    by 0x804896E: (within 
/home/druzus/CVS/harbour/harbour/tests/destruct)
==3235==    by 0x1BAB10A9: hb_vmDo (hvm.c:6988)
==3235==    by 0x1BABB8BA: main (mainstd.c:82)
--3235-- 
--3235-- supp:   20 Ugly strchr error in /lib/ld-2.3.3.so
==3235== 
==3235== IN SUMMARY: 5 errors from 5 contexts (suppressed: 20 from 1)
==3235== 
==3235== malloc/free: in use at exit: 195422 bytes in 3579 blocks.
==3235== malloc/free: 6308 allocs, 2729 frees, 14100808 bytes allocated.
==3235== 
==3235== searching for pointers to 3579 not-freed blocks.
==3235== checked 6959084 bytes.
==3235== 
==3235== LEAK SUMMARY:
==3235==    definitely lost: 0 bytes in 0 blocks.
==3235==    possibly lost:   0 bytes in 0 blocks.
==3235==    still reachable: 195422 bytes in 3579 blocks.
==3235==         suppressed: 0 bytes in 0 blocks.
==3235== Reachable blocks (those to which a pointer was found) are not shown.
==3235== To see them, rerun with: --show-reachable=yes
--3235--     TT/TC: 0 tc sectors discarded.
--3235--            6085 tt_fast misses.
--3235-- translate: new     5888 (98191 -> 1365943; ratio 139:10)
--3235--            discard 1 (23 -> 320; ratio 139:10).
--3235-- chainings: 4218 chainings, 2 unchainings.
--3235--  dispatch: 4352731 jumps (bb entries); of them 276952 (6%) unchained.
--3235--            358/12812 major/minor sched events.
--3235-- reg-alloc: 955 t-req-spill, 252679+6836 orig+spill uis,
--3235--            29997 total-reg-rank
--3235--    sanity: 264 cheap, 11 expensive checks.
--3235--    ccalls: 28827 C calls, 59% saves+restores avoided (101518 bytes)
--3235--            38258 args, avg 0.87 setup instrs each (9476 bytes)
--3235--            0% clear the stack (86337 bytes)
--3235--            9322 retvals, 29% of reg-reg movs avoided (5374 bytes)
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to