https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109

--- Comment #12 from Martin Liška <marxin at gcc dot gnu.org> ---
So the problem happens here:

static
uint32_t
trx_undo_free_page(

 trx_rseg_t* rseg,
 bool in_history,

 uint32_t hdr_page_no,
 uint32_t page_no,

 mtr_t* mtr,


 dberr_t* err)
{
 do { if (__builtin_expect(!(ulint) (hdr_page_no != page_no), (0))) {
ut_dbg_assertion_failed("hdr_page_no != page_no",
"/home/abuild/rpmbuild/BUILD/mariadb-10.11.2/storage/innobase/trx/trx0undo.cc",
744); } } while (0);

 buf_block_t* undo_block = buf_page_get_gen(page_id_t(rseg->space->id,
            page_no),
         0, RW_X_LATCH, nullptr,
         10, mtr, err);
 if (__builtin_expect(!undo_block, (0))) {
  return 0xFFFFFFFFU;
 }
 buf_block_t* header_block = buf_page_get_gen(page_id_t(rseg->space->id,
              hdr_page_no), <---- HERE
           0, RW_X_LATCH, nullptr,
           10, mtr, err);
 if (__builtin_expect(!header_block, (0))) {
  return 0xFFFFFFFFU;
 }
...

the function arguments are:
#1  0x570e8874 in trx_undo_free_page (rseg=0x57a56c40 <trx_sys+16768>,
in_history=false, hdr_page_no=807, page_no=817, mtr=0xef4ac434, err=0xef4ac3dc)
at /tmp/trxundo.ii:181925

and the construction of:
page_id_t(rseg->space->id, hdr_page_no)
ends in callee (buf_page_get_gen) with the argument:

(gdb) p page_id
$5 = {m_id = 0}

while in good run it should be {m_id = 807} !

Reply via email to