From 8f8ad4b6bfc05a9e36fdfefa7677f23d03c59882 Mon Sep 17 00:00:00 2001 From: stephey Date: Sun, 26 Sep 2010 05:39:52 +0000 Subject: [PATCH] Changes --- .../RuntimeConflictResolver.h | 2 + .../Testing_WaitingQueue/WaitingQueue.c | 25 +++++------- .../Testing_WaitingQueue/WaitingQueue.h | 19 +++------- .../Testing_WaitingQueue/WaitingQueueTest.c | 38 +++++++++---------- 4 files changed, 36 insertions(+), 48 deletions(-) diff --git a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/RuntimeConflictResolver.h b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/RuntimeConflictResolver.h index 200668f3..ccd923f5 100644 --- a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/RuntimeConflictResolver.h +++ b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/RuntimeConflictResolver.h @@ -1,6 +1,8 @@ #ifndef __3_RCR_H_ #define __3_RCR_H_ +#define TRAVERSER_FINISHED 2 + //NOTE these files are the fake locks so I can test without compiling entire compiler void traverse______b1745___sesea71___(void * InVar); void traverse______b2746___seseb72___(void * InVar); diff --git a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.c b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.c index 55cd2071..8e55ade8 100644 --- a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.c +++ b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.c @@ -5,9 +5,6 @@ //TODO check that the right path is pointed to by the below #include #include "RuntimeConflictResolver.h" -#define NOT_AT_FRONT = 3; -#define TRAVERSER_FINISHED = 2; - //Note: is global to all processes WaitingQueueBinVector * freeBinVectors; @@ -19,7 +16,7 @@ WaitingQueueBin * mallocWaitingQueue(int size) { } //NOTE: allocSiteID is NOT the same as allocsite, rather it's an ID generated by the traverser for an alloc site for a traversal. -void putWaitingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID) { +void putIntoWaitingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID) { //lock bin WaitingQueueBinVector * currentVector; TraverserResumeDataFromWaitingQ * b; @@ -35,13 +32,13 @@ void putWaitingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, v //completely empty case if (queue[allocSiteID].tail == NULL) { - currentVector = getUsableVector(); + currentVector = getUsableWaitingQueueBinVector(); head = currentVector; queue[allocSiteID].tail = currentVector; //We do not set the head here because we need lock } //Tail bin full else if (queue[allocSiteID].tail->tailIndex == NUMITEMS_WQ) { - currentVector = getUsableVector(); + currentVector = getUsableWaitingQueueBinVector(); queue[allocSiteID].tail->next = currentVector; queue[allocSiteID].tail = currentVector; } else { //the bin not full case @@ -74,7 +71,7 @@ int isEmptyForWaitingQ(WaitingQueueBin * queue, int allocSiteID) { //This method should be called by the SESE block //Return is how many things are removed. -1 would indicate error -int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) { +int removeFromWaitingQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) { TraverserResumeDataFromWaitingQ * td; WaitingQueueBin * be = &(wQueue[allocSiteID]); int count = 0; @@ -91,8 +88,7 @@ int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) return count; } - //TODo replace 2 with #define - if(traverse(td->resumePtr, td->traverserID) == 2) { + if(traverse(td->resumePtr, td->traverserID) == TRAVERSER_FINISHED) { count++; // means we at least got rid of 1 item in the traverser be->size--; @@ -104,7 +100,7 @@ int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) } else if(++(be->head->headIndex) == be->head->tailIndex){ //Note: be->head->next CANNOT be NULL since that would imply be->size == 0 - be->head = returnVectorToFreePool(be->head); + be->head = returnWaitingQueueBinVectorToFreePool(be->head); } } else @@ -113,12 +109,11 @@ int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) } while(1); } -WaitingQueueBinVector * returnVectorToFreePool(WaitingQueueBinVector *ptr) { +WaitingQueueBinVector * returnWaitingQueueBinVectorToFreePool(WaitingQueueBinVector *ptr) { WaitingQueueBinVector * freeHead; WaitingQueueBinVector * ptrNext; do { freeHead = (WaitingQueueBinVector *) 0x1; - //TODO check if this cuts off part of the mem addr or not. freeHead = LOCKXCHG(&freeBinVectors, freeHead); } while (freeHead == (WaitingQueueBinVector *) 0x1); //free bins locked @@ -135,7 +130,7 @@ WaitingQueueBinVector * returnVectorToFreePool(WaitingQueueBinVector *ptr) { return ptrNext; } -WaitingQueueBinVector * getUsableVector() { +WaitingQueueBinVector * getUsableWaitingQueueBinVector() { //Attempt to take one from the free bin first WaitingQueueBinVector * ptr; do { @@ -146,7 +141,7 @@ WaitingQueueBinVector * getUsableVector() { if (ptr == NULL) { freeBinVectors = NULL; //lock released - return mallocNewVector(); + return mallocNewWaitingQueueBinVector(); } else { freeBinVectors = ptr->next; //lock released ptr->next = NULL; @@ -156,7 +151,7 @@ WaitingQueueBinVector * getUsableVector() { } } -WaitingQueueBinVector * mallocNewVector() { +WaitingQueueBinVector * mallocNewWaitingQueueBinVector() { WaitingQueueBinVector * retval = (WaitingQueueBinVector *) malloc( sizeof(WaitingQueueBinVector)); retval->next = NULL; diff --git a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.h b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.h index 7dbd3b08..d67d2444 100644 --- a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.h +++ b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueue.h @@ -7,8 +7,6 @@ #ifndef WAITINGQUEUE_H_ #define WAITINGQUEUE_H_ -#define NOT_AT_FRONT = 3; -#define TRAVERSER_FINISHED = 2; #define NUMITEMS_WQ 20 /* print header */ @@ -32,20 +30,13 @@ typedef struct BinElement_wq { int size; } WaitingQueueBin; - -//TODO in the future, remove this struct all together -//struct WaitingQueue { -// struct BinElement_wq * array; -//}; - -void putWaitingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID); +void putIntoWaitingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID); int isEmptyForWaitingQ(WaitingQueueBin * queue, int allocSiteID); WaitingQueueBin * mallocWaitingQueue(int size); -WaitingQueueBinVector * returnVectorToFreePool(struct BinVector_wq *ptr); -int removeFromQueue(WaitingQueueBin * queue, int allocSiteID, int TraverserID); -//int resolveWaitingQueueChain(struct WaitingQueue * queue, int allocSiteID, int traverserID); -WaitingQueueBinVector * mallocNewVector(); -WaitingQueueBinVector * getUsableVector(); +WaitingQueueBinVector * returnWaitingQueueBinVectorToFreePool(struct BinVector_wq *ptr); +int removeFromWaitingQueue(WaitingQueueBin * queue, int allocSiteID, int TraverserID); +WaitingQueueBinVector * mallocNewWaitingQueueBinVector(); +WaitingQueueBinVector * getUsableWaitingQueueBinVector(); //TODO this only a debug method GET RID OF IT WHEN DONE!! WaitingQueueBinVector * debug_GetTheFreeBinsPtr(); diff --git a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueueTest.c b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueueTest.c index 3a010b6d..2e5c4f80 100644 --- a/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueueTest.c +++ b/Robust/src/Tests/mlp/stephen/Testing_WaitingQueue/WaitingQueueTest.c @@ -33,7 +33,7 @@ void testMalloc(int maxTests) { //P.S. make sure this is the FIRST and ONLY thing to run if you want to test this. void testWaitingQueueFreeBinsSingleTest() { - WaitingQueueBinVector * ptr = getUsableVector(); + WaitingQueueBinVector * ptr = getUsableWaitingQueueBinVector(); if(ptr == NULL) { printf("waitingQueueBinVector didn't work ><\n"); @@ -43,7 +43,7 @@ void testWaitingQueueFreeBinsSingleTest() { printf("either testWaitingQueueFreeBins wasn't called first or somehow it's not null...."); } - if(returnVectorToFreePool(ptr) != NULL) { + if(returnWaitingQueueBinVectorToFreePool(ptr) != NULL) { printf("Returning the .next in the waiting queue didn't quite work..."); } @@ -67,7 +67,7 @@ void waitingQueuePutAndRemoveTestSingle() { } //void putWaintingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID); - putWaitingQueue(100, waitingQueue, 1, 2, 3); + putIntoWaitingQueue(100, waitingQueue, 1, 2, 3); if(isEmptyForWaitingQ(waitingQueue, 100)) { printf("The one item added at location %u did not actually get put there according to isEmpty\n", 100); @@ -96,7 +96,7 @@ void waitingQueuePutAndRemoveTestSingle() { } //int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) - if(removeFromQueue(waitingQueue, 100, 3) != 1) { + if(removeFromWaitingQueue(waitingQueue, 100, 3) != 1) { printf("it appears that removing doens't remove the correct # of items\n"); } @@ -114,9 +114,9 @@ void waitingQueuePutAndRemoveTestMulti() { //add 2 more //void putWaintingQueue(int allocSiteID, WaitingQueueBin * queue, int effectType, void * resumePtr, int traverserID); - putWaitingQueue(100, waitingQueue, 1, 2, 4); - putWaitingQueue(100, waitingQueue, 1, 2, 4); - putWaitingQueue(100, waitingQueue, 1, 2, 5); + putIntoWaitingQueue(100, waitingQueue, 1, 2, 4); + putIntoWaitingQueue(100, waitingQueue, 1, 2, 4); + putIntoWaitingQueue(100, waitingQueue, 1, 2, 5); for(i = 0; i < 200; i++) { if(i != 100) { @@ -137,34 +137,34 @@ void waitingQueuePutAndRemoveTestMulti() { // //Return is how many things are removed. -1 would indicate error // int removeFromQueue(WaitingQueueBin * wQueue, int allocSiteID, int TraverserID) - if(removeFromQueue(waitingQueue, 101,0) != -1) { + if(removeFromWaitingQueue(waitingQueue, 101,0) != -1) { printf("failsafe does not work in removeFromQueue\n"); } - if(removeFromQueue(waitingQueue, 100, 29038) != 0 || removeFromQueue(waitingQueue, 100, 5) != 0) { + if(removeFromWaitingQueue(waitingQueue, 100, 29038) != 0 || removeFromWaitingQueue(waitingQueue, 100, 5) != 0) { printf("removeFromQueue does not check element's traverserID before removing"); } - if(removeFromQueue(waitingQueue, 100, 4) != 1 || waitingQueue[100].size != 1) { + if(removeFromWaitingQueue(waitingQueue, 100, 4) != 1 || waitingQueue[100].size != 1) { printf("removeFromQueue didn't remove items and/or didn't decrement counter correctly 1\n"); } - if(removeFromQueue(waitingQueue, 100, 4) != 0 || waitingQueue[100].size != 1) { + if(removeFromWaitingQueue(waitingQueue, 100, 4) != 0 || waitingQueue[100].size != 1) { printf("removeFromQueue didn't remove items and/or didn't decrement counter correctly 2\n"); } - if(removeFromQueue(waitingQueue, 99, 5) != -1 || waitingQueue[99].size != 0) { + if(removeFromWaitingQueue(waitingQueue, 99, 5) != -1 || waitingQueue[99].size != 0) { printf("failsafe in remove does not work correctly\n"); } - if(removeFromQueue(waitingQueue, 100, 5) != 1 || waitingQueue[100].size != 0 || !isEmptyForWaitingQ(waitingQueue, 100)) { + if(removeFromWaitingQueue(waitingQueue, 100, 5) != 1 || waitingQueue[100].size != 0 || !isEmptyForWaitingQ(waitingQueue, 100)) { printf("removeFromQueue didn't remove items and/or didn't decrement counter correctly 3\n"); } //next try adding 10,000 items for(i = 0; i < 10000; i++) { - putWaitingQueue(100, waitingQueue, 1, 2, i); + putIntoWaitingQueue(100, waitingQueue, 1, 2, i); } if(isEmptyForWaitingQ(waitingQueue, 100)) { @@ -180,7 +180,7 @@ void waitingQueuePutAndRemoveTestMulti() { } for(i = 0; i <10000; i++) { - if(removeFromQueue(waitingQueue, 100, i) != 1) { + if(removeFromWaitingQueue(waitingQueue, 100, i) != 1) { printf("remove from 10000 didn't properly just remove ONE item"); } @@ -209,7 +209,7 @@ void testWaitingQueueFreeBinsMultipleTest(int size) { int i; for(i = 0; i < size; i++) { - ptrs[i] = getUsableVector(); + ptrs[i] = getUsableWaitingQueueBinVector(); ptrs[i]->tailIndex = 293847; //this is to make sure we don't get a segmentation fault if(ptrs[i]->next != NULL || ptrs[i]->tailIndex != 293847) { @@ -222,14 +222,14 @@ void testWaitingQueueFreeBinsMultipleTest(int size) { } for(i = 0; i < size; i++) { - returnVectorToFreePool(ptrs[i]); + returnWaitingQueueBinVectorToFreePool(ptrs[i]); if(debug_GetTheFreeBinsPtr() != ptrs[i]) { printf("it appears that the returnVectorToFreePool didn't put the vector at the front at index %u\n", i); } } for(i = size-1; i>= 0; i--) { - if(getUsableVector() != ptrs[i]) { + if(getUsableWaitingQueueBinVector() != ptrs[i]) { printf("getUsableVector does not get the correct one at index %u\n", i); } } @@ -260,6 +260,6 @@ void testLOCKXCHG() { } int main() { - waitingQueuePutAndRemoveTestMulti(); + testWaitingQueueFreeBinsMultipleTest(1000); return 1; } -- 2.34.1