fixes on hashStructure : when parent bin is ready, it should not be inserted to the...
authoryeom <yeom>
Sat, 13 Nov 2010 04:06:40 +0000 (04:06 +0000)
committeryeom <yeom>
Sat, 13 Nov 2010 04:06:40 +0000 (04:06 +0000)
Robust/src/Runtime/oooJava/hashStructure.c
Robust/src/Runtime/oooJava/hashStructure.h

index 4f9c57de8b739e563ccc3f8b21d7496912f64fee..a51e5f2e0a7d93f871ebf59a6d5cf68306cf826f 100644 (file)
@@ -89,6 +89,11 @@ inline int rcr_BWRITEBINCASE(HashStructure *T, int key, SESEcommon *task, struct
   } while(val==(BinItem_rcr*)0x1);     
 
   if (val==NULL) {
+    if (((INTPTR)task)&PARENTBIN) {
+      be->head=val;
+      return READY;
+    }
+
     BinItem_rcr * b=(BinItem_rcr*)rcr_createWriteBinItem( T );
     WriteBinItem_rcr * td = (WriteBinItem_rcr*)b;
     b->total=1;
@@ -205,6 +210,11 @@ inline int rcr_BREADBINCASE(HashStructure *T, int key, SESEcommon *task, struct
   } while(val==(BinItem_rcr*)0x1);     
   
   if (val==NULL) {
+    if (((INTPTR)task)&PARENTBIN) {
+      be->head=val;
+      return READY;
+    }
+
     BinItem_rcr * b=(BinItem_rcr*)rcr_createReadBinItem( T );
     ReadBinItem_rcr* readbin=(ReadBinItem_rcr*)b;
     TraverserData * td = &(readbin->array[readbin->index++]);
@@ -268,6 +278,11 @@ inline int rcr_BREADBINCASE(HashStructure *T, int key, SESEcommon *task, struct
   }
 
   if (ISREADBIN(bintail->type)) {
+    if ((((INTPTR)task)&PARENTBIN)&&(bintail->status==READY)) {
+      be->head=val;
+      return READY;
+    }
+
     int stat=rcr_TAILREADCASE(T, val, bintail, key, task, rcrrec, index);
     if (mode) {
       struct BinItem_rcr * bt=be->tail;
@@ -457,7 +472,8 @@ void rcr_RETIREHASHTABLE(HashStructure *T, SESEcommon *task, int key, BinItem_rc
             //poolfreeinto( T->memPoolWrite, ptr );
          } else
            break;
-       }
+       } else
+         break;
       }
       ptr = next;
     }
index 81a648041b51db6948bb4ed1396d1c9e50a5a200..26ec2f406faab70ef89c61d4341cb24941ad979b 100644 (file)
@@ -16,7 +16,7 @@
 #define READBIN 0
 #define WRITEBIN 1
 #define BINMASK 1
-#define PARENTBIN 1
+#define PARENTBIN 1ULL
 
 #define SPEC 2
 #define READY 1          //Item is ready and we haven't seen this bin before