Lines Matching refs:node

40   // addr is the cache addres of the node being inserted or removed. We want to
184 // Update the timestamp fields of |node|.
185 void UpdateTimes(disk_cache::CacheRankingsBlock* node, bool modified) {
187 node->Data()->last_used = now.ToInternalValue();
189 node->Data()->last_modified = now.ToInternalValue();
202 Rankings* rankings, CacheRankingsBlock* node)
203 : scoped_ptr<CacheRankingsBlock>(node), rankings_(rankings) {}
249 void Rankings::Insert(CacheRankingsBlock* node, bool modified, List list) {
250 Trace("Insert 0x%x l %d", node->address().value(), list);
251 DCHECK(node->HasData());
254 Transaction lock(control_data_, node->address(), INSERT, list);
261 head.Data()->prev != node->address().value()) { // FinishInsert().
266 head.Data()->prev = node->address().value();
272 node->Data()->next = my_head.value();
273 node->Data()->prev = node->address().value();
274 my_head.set_value(node->address().value());
276 if (!my_tail.is_initialized() || my_tail.value() == node->address().value()) {
277 my_tail.set_value(node->address().value());
278 node->Data()->next = my_tail.value();
283 UpdateTimes(node, modified);
284 node->Store();
287 // The last thing to do is move our head to point to a node already stored.
307 // 4. a(x, b), r(0, 0), b(a, y), head(x), tail(y) node.Store()
320 void Rankings::Remove(CacheRankingsBlock* node, List list, bool strict) {
321 Trace("Remove 0x%x (0x%x 0x%x) l %d", node->address().value(),
322 node->Data()->next, node->Data()->prev, list);
323 DCHECK(node->HasData());
325 InvalidateIterators(node);
327 Addr next_addr(node->Data()->next);
328 Addr prev_addr(node->Data()->prev);
345 if (!CheckLinks(node, &prev, &next, &list))
348 Transaction lock(control_data_, node->address(), REMOVE, list);
353 CacheAddr node_value = node->address().value();
385 node->Data()->next = 0;
386 node->Data()->prev = 0;
388 // The last thing to get to disk is the node itself, so before that there is
394 node->Store();
405 void Rankings::UpdateRank(CacheRankingsBlock* node, bool modified, List list) {
407 if (my_head.value() == node->address().value()) {
408 UpdateTimes(node, modified);
409 node->set_modified();
414 Remove(node, list, true);
415 Insert(node, modified, list);
419 CacheRankingsBlock* Rankings::GetNext(CacheRankingsBlock* node, List list) {
421 if (!node) {
427 if (!node->HasData())
428 node->Load();
432 if (my_tail.value() == node->address().value())
434 Addr address(node->Data()->next);
435 if (address.value() == node->address().value())
446 if (node && !CheckSingleLink(node, next.get()))
452 CacheRankingsBlock* Rankings::GetPrev(CacheRankingsBlock* node, List list) {
454 if (!node) {
460 if (!node->HasData())
461 node->Load();
465 if (my_head.value() == node->address().value())
467 Addr address(node->Data()->prev);
468 if (address.value() == node->address().value())
479 if (node && !CheckSingleLink(prev.get(), node))
485 void Rankings::FreeRankingsBlock(CacheRankingsBlock* node) {
486 TrackRankingsBlock(node, false);
489 void Rankings::TrackRankingsBlock(CacheRankingsBlock* node,
491 if (!node)
494 IteratorPair current(node->address().value(), node);
516 bool Rankings::SanityCheck(CacheRankingsBlock* node, bool from_list) const {
517 if (!node->VerifyHash())
520 const RankingsNode* data = node->Data();
525 // Both pointers on zero is a node out of the list.
530 if ((node->address().value() == data->prev) && !IsHead(data->prev, &list))
533 if ((node->address().value() == data->next) && !IsTail(data->next, &list))
548 bool Rankings::DataSanityCheck(CacheRankingsBlock* node, bool from_list) const {
549 const RankingsNode* data = node->Data();
560 void Rankings::SetContents(CacheRankingsBlock* node, CacheAddr address) {
561 node->Data()->contents = address;
562 node->Store();
628 // We cannot return a shared node because we are not keeping a reference
629 // to the entry that owns the buffer. Make this node a copy of the one that
647 CacheRankingsBlock node(backend_->File(node_addr), node_addr);
648 if (!node.Load())
651 node.Store();
656 // We want to leave the node inside the list. The entry must me marked as
661 FinishInsert(&node);
664 RevertRemove(&node);
671 void Rankings::FinishInsert(CacheRankingsBlock* node) {
676 if (my_head.value() != node->address().value()) {
677 if (my_tail.value() == node->address().value()) {
679 node->Data()->next = my_tail.value();
682 Insert(node, true, static_cast<List>(control_data_->operation_list));
686 backend_->RecoveredEntry(node);
689 void Rankings::RevertRemove(CacheRankingsBlock* node) {
690 Addr next_addr(node->Data()->next);
691 Addr prev_addr(node->Data()->prev);
709 CacheAddr node_value = node->address().value();
747 bool Rankings::CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev,
749 CacheAddr node_addr = node->address().value();
752 // A regular linked node.
763 // The list is actually ok, node is wrong.
764 Trace("node 0x%x out of list %d", node_addr, list);
765 node->Data()->next = 0;
766 node->Data()->prev = 0;
767 node->Store();
814 // to be able to detect a corrupt node at the end that is not linked going back.
826 scoped_ptr<CacheRankingsBlock> node;
829 node.reset(new CacheRankingsBlock(backend_->File(current), current));
830 node->Load();
831 if (!SanityCheck(node.get(), true))
834 CacheAddr next = forward ? node->Data()->next : node->Data()->prev;
835 CacheAddr prev = forward ? node->Data()->prev : node->Data()->next;
886 // of cache iterators and update all that are pointing to the given node.
887 void Rankings::UpdateIterators(CacheRankingsBlock* node) {
888 CacheAddr address = node->address().value();
893 *other->Data() = *node->Data();
898 void Rankings::InvalidateIterators(CacheRankingsBlock* node) {
899 CacheAddr address = node->address().value();