Loading configure.in +9 −16 Original line number Diff line number Diff line Loading @@ -936,17 +936,15 @@ esac MAX_C_OPTIMIZE="-O3" MAX_CXX_OPTIMIZE="-O3" fix_for_forte_x86 () { case $MACHINE_TYPE-$ac_cv_prog_gcc in i?86-no) # workaround for Sun Forte/x86 see BUG#4681 case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc in *solaris*-i?86-no) CFLAGS="$CFLAGS -DBIG_FILES" CXXFLAGS="$CXXFLAGS -DBIG_FILES" ;; *) ;; esac } case $SYSTEM_TYPE in *solaris2.7*) Loading @@ -962,7 +960,6 @@ case $SYSTEM_TYPE in sed -e "s|^#if[ ]*!defined(lint) && !defined(__lint)|#if !defined\(lint\) \&\& !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *solaris2.8*) # Solaris 2.8 has a broken /usr/include/widec.h Loading @@ -977,23 +974,19 @@ case $SYSTEM_TYPE in sed -e "s|^#if[ ]*!defined(__lint)|#if !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *solaris2.5.1*) echo "Enabling getpass() workaround for Solaris 2.5.1" CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS -DHAVE_RWLOCK_T"; CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T -DSOLARIS" fix_for_forte_x86 ;; *solaris*) CFLAGS="$CFLAGS -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *SunOS*) echo "Enabling getpass() workaround for SunOS" CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS"; fix_for_forte_x86 ;; *hpux10.20*) echo "Enabling workarounds for hpux 10.20" Loading innobase/buf/buf0flu.c +54 −0 Original line number Diff line number Diff line Loading @@ -213,7 +213,9 @@ buf_flush_buffered_writes(void) /*===========================*/ { buf_block_t* block; byte* write_buf; ulint len; ulint len2; ulint i; if (trx_doublewrite == NULL) { Loading @@ -240,6 +242,16 @@ buf_flush_buffered_writes(void) block = trx_doublewrite->buf_block_arr[i]; ut_a(block->state == BUF_BLOCK_FILE_PAGE); if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4) != mach_read_from_4(block->frame + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the buffer pool\n" "InnoDB: before posting to the doublewrite buffer.\n"); } if (block->check_index_page_at_flush && !page_simple_validate(block->frame)) { Loading Loading @@ -268,6 +280,19 @@ buf_flush_buffered_writes(void) trx_doublewrite->block1, 0, len, (void*)trx_doublewrite->write_buf, NULL); write_buf = trx_doublewrite->write_buf; for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the doublewrite block1.\n"); } } if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) { len = (trx_doublewrite->first_free - TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE; Loading @@ -278,6 +303,22 @@ buf_flush_buffered_writes(void) (void*)(trx_doublewrite->write_buf + TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE), NULL); write_buf = trx_doublewrite->write_buf + TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE; for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the doublewrite block2.\n"); } } } /* Now flush the doublewrite buffer data to disk */ Loading @@ -291,6 +332,19 @@ buf_flush_buffered_writes(void) for (i = 0; i < trx_doublewrite->first_free; i++) { block = trx_doublewrite->buf_block_arr[i]; if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4) != mach_read_from_4(block->frame + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the buffer pool\n" "InnoDB: after posting and flushing the doublewrite buffer.\n" "InnoDB: Page buf fix count %lu, io fix %lu, state %lu\n", (ulong)block->buf_fix_count, (ulong)block->io_fix, (ulong)block->state); } fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER, FALSE, block->space, block->offset, 0, UNIV_PAGE_SIZE, (void*)block->frame, (void*)block); Loading innobase/include/page0page.ic +9 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,15 @@ page_rec_get_next( offs = rec_get_next_offs(rec); ut_a(offs < UNIV_PAGE_SIZE); if (offs >= UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Next record offset is nonsensical %lu in record at offset %lu\n", (ulong)offs, (ulong)(rec - page)); buf_page_print(page); ut_a(0); } if (offs == 0) { Loading innobase/os/os0file.c +3 −0 Original line number Diff line number Diff line Loading @@ -2736,6 +2736,9 @@ os_aio_simulated_handle( ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n"); fprintf(stderr, "InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n", (ulong)total_len, (ulong)len2); buf_page_print(combined_buf + len2); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); Loading innobase/row/row0sel.c +1 −0 Original line number Diff line number Diff line Loading @@ -3088,6 +3088,7 @@ row_search_for_mysql( if (srv_force_recovery == 0 || moves_up == FALSE) { ut_print_timestamp(stderr); buf_page_print(buf_frame_align(rec)); fprintf(stderr, " InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n" "InnoDB: ", Loading Loading
configure.in +9 −16 Original line number Diff line number Diff line Loading @@ -936,17 +936,15 @@ esac MAX_C_OPTIMIZE="-O3" MAX_CXX_OPTIMIZE="-O3" fix_for_forte_x86 () { case $MACHINE_TYPE-$ac_cv_prog_gcc in i?86-no) # workaround for Sun Forte/x86 see BUG#4681 case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc in *solaris*-i?86-no) CFLAGS="$CFLAGS -DBIG_FILES" CXXFLAGS="$CXXFLAGS -DBIG_FILES" ;; *) ;; esac } case $SYSTEM_TYPE in *solaris2.7*) Loading @@ -962,7 +960,6 @@ case $SYSTEM_TYPE in sed -e "s|^#if[ ]*!defined(lint) && !defined(__lint)|#if !defined\(lint\) \&\& !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *solaris2.8*) # Solaris 2.8 has a broken /usr/include/widec.h Loading @@ -977,23 +974,19 @@ case $SYSTEM_TYPE in sed -e "s|^#if[ ]*!defined(__lint)|#if !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *solaris2.5.1*) echo "Enabling getpass() workaround for Solaris 2.5.1" CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS -DHAVE_RWLOCK_T"; CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T -DSOLARIS" fix_for_forte_x86 ;; *solaris*) CFLAGS="$CFLAGS -DHAVE_RWLOCK_T" CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T" fix_for_forte_x86 ;; *SunOS*) echo "Enabling getpass() workaround for SunOS" CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS"; fix_for_forte_x86 ;; *hpux10.20*) echo "Enabling workarounds for hpux 10.20" Loading
innobase/buf/buf0flu.c +54 −0 Original line number Diff line number Diff line Loading @@ -213,7 +213,9 @@ buf_flush_buffered_writes(void) /*===========================*/ { buf_block_t* block; byte* write_buf; ulint len; ulint len2; ulint i; if (trx_doublewrite == NULL) { Loading @@ -240,6 +242,16 @@ buf_flush_buffered_writes(void) block = trx_doublewrite->buf_block_arr[i]; ut_a(block->state == BUF_BLOCK_FILE_PAGE); if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4) != mach_read_from_4(block->frame + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the buffer pool\n" "InnoDB: before posting to the doublewrite buffer.\n"); } if (block->check_index_page_at_flush && !page_simple_validate(block->frame)) { Loading Loading @@ -268,6 +280,19 @@ buf_flush_buffered_writes(void) trx_doublewrite->block1, 0, len, (void*)trx_doublewrite->write_buf, NULL); write_buf = trx_doublewrite->write_buf; for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the doublewrite block1.\n"); } } if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) { len = (trx_doublewrite->first_free - TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE; Loading @@ -278,6 +303,22 @@ buf_flush_buffered_writes(void) (void*)(trx_doublewrite->write_buf + TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE), NULL); write_buf = trx_doublewrite->write_buf + TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE; for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the doublewrite block2.\n"); } } } /* Now flush the doublewrite buffer data to disk */ Loading @@ -291,6 +332,19 @@ buf_flush_buffered_writes(void) for (i = 0; i < trx_doublewrite->first_free; i++) { block = trx_doublewrite->buf_block_arr[i]; if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4) != mach_read_from_4(block->frame + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: The lsn fields do not match! Noticed in the buffer pool\n" "InnoDB: after posting and flushing the doublewrite buffer.\n" "InnoDB: Page buf fix count %lu, io fix %lu, state %lu\n", (ulong)block->buf_fix_count, (ulong)block->io_fix, (ulong)block->state); } fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER, FALSE, block->space, block->offset, 0, UNIV_PAGE_SIZE, (void*)block->frame, (void*)block); Loading
innobase/include/page0page.ic +9 −1 Original line number Diff line number Diff line Loading @@ -479,7 +479,15 @@ page_rec_get_next( offs = rec_get_next_offs(rec); ut_a(offs < UNIV_PAGE_SIZE); if (offs >= UNIV_PAGE_SIZE) { fprintf(stderr, "InnoDB: Next record offset is nonsensical %lu in record at offset %lu\n", (ulong)offs, (ulong)(rec - page)); buf_page_print(page); ut_a(0); } if (offs == 0) { Loading
innobase/os/os0file.c +3 −0 Original line number Diff line number Diff line Loading @@ -2736,6 +2736,9 @@ os_aio_simulated_handle( ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n"); fprintf(stderr, "InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n", (ulong)total_len, (ulong)len2); buf_page_print(combined_buf + len2); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); Loading
innobase/row/row0sel.c +1 −0 Original line number Diff line number Diff line Loading @@ -3088,6 +3088,7 @@ row_search_for_mysql( if (srv_force_recovery == 0 || moves_up == FALSE) { ut_print_timestamp(stderr); buf_page_print(buf_frame_align(rec)); fprintf(stderr, " InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n" "InnoDB: ", Loading