/* 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; }
/* * 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; }