From 87a2228b48ec20742bc275204af2d4663e40b34b Mon Sep 17 00:00:00 2001 From: bdemsky Date: Sat, 24 Oct 2009 07:10:51 +0000 Subject: [PATCH] bug fixes --- Robust/src/Runtime/garbage.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Robust/src/Runtime/garbage.c b/Robust/src/Runtime/garbage.c index 6f982525..55135b17 100644 --- a/Robust/src/Runtime/garbage.c +++ b/Robust/src/Runtime/garbage.c @@ -201,15 +201,25 @@ void fixtable(chashlistnode_t ** tc_table, chashlistnode_t **tc_list, cliststruc int i; SENQUEUE((void *)ao->___objlocation___, *((void **)&ao->___objlocation___)); #ifdef STMARRAY - int lowindex=(ao->lowindex)/sizeof(void *); - int highindex=(ao->highindex+INDEXLENGTH)/sizeof(void *); - for(i=lowindex; ilowindex>>INDEXSHIFT; + int highind=ao->highindex; + int highindex=(highind==-1)?-1:(highind>>INDEXSHIFT); + int j; + for(j=lowindex; j<=highindex; j++) { + unsigned int lockval; + if (GETLOCKVAL(lockval, ao, j)==STMDIRY) { + int lowi=(j<___length___)+sizeof(int)))[i]; + SENQUEUE(objptr, ((void **)(((char *)&ao->___length___)+sizeof(int)))[i]); + } +#ifdef STMARRAY + } #endif - void *objptr=((void **)(((char *)&ao->___length___)+sizeof(int)))[i]; - SENQUEUE(objptr, ((void **)(((char *)&ao->___length___)+sizeof(int)))[i]); - } } else { INTPTR size=pointer[0]; int i; -- 2.34.1