X-Git-Url: http://plrg.eecs.uci.edu/git/?p=repair.git;a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FRuntime%2FSimpleHash.cc;h=6281d150906ea41f4dacad41add0e523d4222f51;hp=07f8a12b97511c5eb7f77fdb46f22da89f462592;hb=bfa6572a30b82fb1a430cb78e79a55ed93e4640a;hpb=b8581255abd288fa590fe18d7424aeb82d945675 diff --git a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc index 07f8a12..6281d15 100755 --- a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc +++ b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc @@ -119,10 +119,12 @@ void WorkList::pop() { int newoffset=tailoffset+4; struct ListNode *ptr=tail; if (newoffset>=WLISTSIZE) { - newoffset-=WLISTSIZE; - struct ListNode *oldptr=ptr; - ptr=ptr->next; - free(oldptr); + if (newoffset!=WLISTSIZE||head!=tail) { + newoffset-=WLISTSIZE; + struct ListNode *oldptr=ptr; + ptr=ptr->next; + free(oldptr); + } } tail=ptr; tailoffset=newoffset; @@ -136,6 +138,10 @@ void WorkList::add(int id,int type, int lvalue, int rvalue) { } headoffset=0; head=head->next; + if (tailoffset==WLISTSIZE) { /* roll the tail over also */ + tailoffset=0; + tail=tail->next; + } } head->data[headoffset++]=id; head->data[headoffset++]=type;