int runTestCase(CASE* c, linked_list* list) { int retval = 0; switch(c->op) { case ADD_FRONT: retval = addToHead(list, &(c->value)); break; case ADD_BACK: retval = addToTail(list, &(c->value)); break; case REMOVE_FRONT: retval = *((int*) removeFromHead(list)); break; case REMOVE_BACK: retval = *((int*) removeFromTail(list)); break; case SIZE: retval = list -> size; break; } if (retval != c->expected) { printf("failure, want %d, got %d\n", c->expected, retval); return FAILURE; } return SUCCESS; }
void* testConsumer(void* llist) { linked_list* list = (linked_list*) llist; for (int i = 0; i < 5; i++) { int* num = removeFromHead(list); free(num); sleep(1); } }
RC shutdownBufferPool(BM_BufferPool *const bm) { // Flush the pool RC flushResult = forceFlushPool(bm); if (flushResult != RC_OK) { return flushResult; } // Retrieve management data BM_MgmtData *mgmtData = bm->mgmtData; BM_Frame *frame = &mgmtData->framePool[0]; // Check for pinned pages int i; for (i = 0; i < bm->numPages; i++) { if (frame->fixCount != 0) { return RC_FRAME_PINNED_PAGE; } frame++; } // Close storage manager details RC pageCloseResult = closePageFile(&mgmtData->fh); if (pageCloseResult != RC_OK) { return pageCloseResult; } // Free memory and lists // Free frames for (i = 0; i < bm->numPages; i++) { free(mgmtData->framePool[i].memPage); } // Free frame pool free(mgmtData->framePool); // Free linked list nodes BM_Node *freeHead = mgmtData->head; while (freeHead != NULL) { freeHead = removeFromHead(&mgmtData->head); if (freeHead != NULL) { free(freeHead); } } // Free mgmt data free(bm->mgmtData); // Free buffer pool free(bm->pageFile); return RC_OK; }
void pop(TableManager *tableManager, Pager *dp, int pageno) { if (dp->prev==0 && dp->next==0) return; if (pageno == tableManager->pageNo){ removeFromHead(tableManager, dp, pageno); } else if (dp->next == 0){ removeFromTail(tableManager, dp, pageno); } else if (dp->next != 0 && dp->prev != 0){ removeFromMiddle(tableManager, dp, pageno); } }
void flush(linked_list* ll) { while(removeFromHead(ll)==0); }
// Method to pop an item from the stack TCListNode* pop() { return removeFromHead(); };