Commit 5a6ab6ad authored by unknown's avatar unknown
Browse files

Merge istruewing@bk-internal.mysql.com:/home/bk/mysql-4.0

into mysql.com:/home/mydev/mysql-4.0

parents a60b8496 5e33eb8e
Loading
Loading
Loading
Loading
+9 −16
Original line number Diff line number Diff line
@@ -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*)
@@ -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
@@ -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"
+54 −0
Original line number Diff line number Diff line
@@ -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) {
@@ -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)) {

@@ -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;
@@ -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 */
@@ -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);
+9 −1
Original line number Diff line number Diff line
@@ -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) {
		
+3 −0
Original line number Diff line number Diff line
@@ -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");
+1 −0
Original line number Diff line number Diff line
@@ -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: ",