fix potential bug with clear function
authorbdemsky <bdemsky>
Wed, 29 Jun 2011 09:45:54 +0000 (09:45 +0000)
committerbdemsky <bdemsky>
Wed, 29 Jun 2011 09:45:54 +0000 (09:45 +0000)
Robust/src/Runtime/bamboo/markbit.h

index acec1ae1393c4535aca778ae87d09dbd151c2bdc..afe82af6d0347a3126d3a66d1bb0dca970798c91 100644 (file)
@@ -124,7 +124,6 @@ static inline void clearMark(void *ptr) {
     unsigned int bits=(index>48)?32:bitmarkmappingarray[index];
     unsigned int bitstotoss=32-bits;
     gcmarktbl[hibits]^=((hipart>>(bitstotoss))<<(bitstotoss));
-
   } else {
     unsigned int orighi=gcmarktbl[hibits];
     unsigned int hipart=orighi<<lobits;
@@ -142,7 +141,9 @@ static inline void clearMark(void *ptr) {
       gcmarktbl[hibits]^=(hipart>>bitstotoss)<<bitstotossminuslobits;
     } else
       gcmarktbl[hibits]^=hipart>>lobits;
-    gcmarktbl[hibits+1]^=(lowpart>>bitstotoss)<<(bitstotoss+revlobits);
+    unsigned int xormask=(lowpart>>bitstotoss)<<(bitstotoss+revlobits);
+    if (xormask)
+      gcmarktbl[hibits+1]^=xormask;
   }
 }