Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
    }
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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);
    }
}
Esempio n. 5
0
void flush(linked_list* ll) {
	while(removeFromHead(ll)==0);
}
Esempio n. 6
0
 // Method to pop an item from the stack
 TCListNode* pop()           { return removeFromHead(); };