Commit 1a166bc4 authored by unknown's avatar unknown

Bug#20612.


storage/ndb/src/kernel/blocks/pgman.cpp:
  a) in one case pl_queue.remove(ptr) was not followed
  by state &= ~ Page_entry::ONQUEUE.
  
  b) when collecting initial hot entries have to remove
  from queue if somehow got there.
  
  b) is easy to get with large buffer cache (256M).
  a) or b) is probably cause of bug#20612.
parent 45cd1001
...@@ -669,6 +669,7 @@ Pgman::lirs_reference(Ptr<Page_entry> ptr) ...@@ -669,6 +669,7 @@ Pgman::lirs_reference(Ptr<Page_entry> ptr)
jam(); jam();
move_cleanup_ptr(ptr); move_cleanup_ptr(ptr);
pl_queue.remove(ptr); pl_queue.remove(ptr);
state &= ~ Page_entry::ONQUEUE;
} }
if (state & Page_entry::BOUND) if (state & Page_entry::BOUND)
{ {
...@@ -699,6 +700,12 @@ Pgman::lirs_reference(Ptr<Page_entry> ptr) ...@@ -699,6 +700,12 @@ Pgman::lirs_reference(Ptr<Page_entry> ptr)
pl_stack.add(ptr); pl_stack.add(ptr);
state |= Page_entry::ONSTACK; state |= Page_entry::ONSTACK;
state |= Page_entry::HOT; state |= Page_entry::HOT;
// it could be on queue already
if (state & Page_entry::ONQUEUE) {
jam();
pl_queue.remove(ptr);
state &= ~Page_entry::ONQUEUE;
}
} }
set_page_state(ptr, state); set_page_state(ptr, state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment