On Mon, May 21, 2018 at 1:31 PM, Euler Taveira <euler@timbira.com.br> wrote:
> (gdb) bt full
Have you managed to see the crash more than once in your environment?
I wonder if the problem is somehow related to spilling to a reorder
buffer temp/spool file.
I must admit that I don't really understand the interactions between
this code, within ReorderBufferCommit():
case REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT:
/*
* Speculative insertions are dealt with by delaying the
* processing of the insert until the confirmation record
* arrives. For that we simply unlink the record from the
* chain, so it does not get freed/reused while restoring
* spooled data from disk.
*
* ...
*/
...
/* and memorize the pending insertion */
dlist_delete(&change->node);
specinsert = change;
break;
...with the code for dealing with in-memory change records when
loading from disk, within ReorderBufferIterTXNNext():
/* try to load changes from disk */
if (entry->txn->nentries != entry->txn->nentries_mem)
{
/*
* Ugly: restoring changes will reuse *Change records, thus delete the
* current one from the per-tx list and only free in the next call.
*/
dlist_delete(&change->node);
dlist_push_tail(&state->old_change, &change->node);
...
Perhaps I've missed something obvious.
--
Peter Geoghegan