diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 4773b4e1c0..5d31c90c92 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,9 @@ +2000-07-08 10:40 UTC+0100 Ryszard Glab + + *source/vm/garbage.c + * fixed possible endless loop during the garbage collecting + (this time for real :-) + 2000-07-07 17:30 UTC+0800 Ron Pinkas - include\harbour.slx - source\compiler\harbourl.c diff --git a/harbour/source/vm/garbage.c b/harbour/source/vm/garbage.c index abdfb51b96..b7350014f5 100644 --- a/harbour/source/vm/garbage.c +++ b/harbour/source/vm/garbage.c @@ -271,19 +271,22 @@ BOOL hb_gcItemRef( HB_ITEM_PTR pItem, void *pBlock ) ULONG ulSize = pItem->item.asArray.value->ulLen; --pAlloc; - pAlloc->status |= HB_GC_CHECKING; - pItem = pItem->item.asArray.value->pItems; - while( ulSize-- ) + if( !( pAlloc->status & HB_GC_CHECKING ) ) { - if( hb_gcItemRef( pItem, pBlock ) ) + pAlloc->status |= HB_GC_CHECKING; + pItem = pItem->item.asArray.value->pItems; + while( ulSize-- ) { - pAlloc->status &= ~( (ULONG) ( HB_GC_CHECKING ) ); - return TRUE; + if( hb_gcItemRef( pItem, pBlock ) ) + { + pAlloc->status &= ~( (ULONG) ( HB_GC_CHECKING ) ); + return TRUE; + } + else + ++pItem; } - else - ++pItem; + pAlloc->status &= ~( (ULONG) ( HB_GC_CHECKING ) ); } - pAlloc->status &= ~( (ULONG) ( HB_GC_CHECKING ) ); } } else if( HB_IS_BLOCK( pItem ) )