From e5a9eceff45a673f5dba0a6fa4e5125eeb16b933 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Tue, 29 Nov 2016 17:23:53 +0200 Subject: [PATCH] Cache: Fix prev/next twiddling --- server/modules/filter/cache/lrustorage.cc | 5 +++-- server/modules/filter/cache/lrustorage.h | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/modules/filter/cache/lrustorage.cc b/server/modules/filter/cache/lrustorage.cc index 3e3711cd8..2c5c63e67 100644 --- a/server/modules/filter/cache/lrustorage.cc +++ b/server/modules/filter/cache/lrustorage.cc @@ -51,7 +51,7 @@ cache_result_t LRUStorage::do_get_value(const CACHE_KEY& key, { if (ptail_ == i->second) { - ptail_ = i->second->next(); + ptail_ = i->second->prev(); } phead_ = i->second->prepend(phead_); @@ -217,6 +217,7 @@ LRUStorage::Node* LRUStorage::free_lru() if (free_node_data(ptail_)) { pnode = ptail_; + ptail_ = ptail_->remove(); } return pnode; @@ -280,7 +281,7 @@ bool LRUStorage::free_node_data(Node* pnode) NodesPerKey::iterator i = nodes_per_key_.find(*pkey); - if (i != nodes_per_key_.end()) + if (i == nodes_per_key_.end()) { MXS_ERROR("Item in LRU list was not found in key mapping."); } diff --git a/server/modules/filter/cache/lrustorage.h b/server/modules/filter/cache/lrustorage.h index 59bc57e2f..15ef0a9f3 100644 --- a/server/modules/filter/cache/lrustorage.h +++ b/server/modules/filter/cache/lrustorage.h @@ -119,8 +119,10 @@ private: pnode->pprev_->pnext_ = this; } - pnode->pprev_ = this; + pprev_ = pnode->pprev_; pnext_ = pnode; + + pnode->pprev_ = this; } return this;