Exemple #1
0
/* Add a node to the linked list with the current data from the server. */
void add_node(cache* list, char* url, char* data, int length)
{
    node* p;
    if (list == NULL)
        return;

    p = new_node(url, data, length);
    if (p == NULL)
        return;

    if (list->empty_size >= p->size)
    {
        P(&list->mutex_w);
        insert_node_end(list, p);
        V(&list->mutex_w);
    }
    else
    {
        P(&list->mutex_w);
        evict_node(list, p);
        insert_node_end(list, p);
        V(&list->mutex_w);
    }

    return;
}
Exemple #2
0
/*
 * write_cache - Write the response to the cache
 * 
 * Given uri, response, the size of response and the cache-list header
 * Insert a node with all these information
 *
 */
int write_cache(Cache cache, char *uri, char *res, int res_size)
{
    c_dbgprintf("\n-------------------------------\n");
    c_dbgprintf("    -try writing uri: %s\n", uri);

    if (res_size > MAX_OBJECT_SIZE)
        return 0;
    if (uri[strlen(uri) + 1] == '/')
        return 0;

    sem_wait(cache->write);

    evict_node(cache, res_size);

    Node new_n = new_node(uri, res, res_size);

    if (cache->head == NULL && cache->tail == NULL)
    {
        cache->head = new_n;
        cache->tail = new_n;
        new_n->next = NULL;
    }
    else
    {
        new_n->next = cache->head;
        cache->head = new_n;
        // cache->tail->next = new_n;
        // cache->tail = new_n;
    }   
    cache->left_size -= res_size;

    c_dbgprintf("    -write in cache, uri: %s\n", new_n->uri);
    c_dbgprintf("    -left size: %d\n", cache->left_size);
    c_dbgprintf("-------------------------------\n");
    sem_post(cache->write);

    return 1;
}