diff options
author | unknown <serg@serg.mysql.com> | 2002-08-31 23:38:10 +0000 |
---|---|---|
committer | unknown <serg@serg.mysql.com> | 2002-08-31 23:38:10 +0000 |
commit | f7d6288db21cbfc1315403adfcf8f2e59a5f305f (patch) | |
tree | 91af427b2b554f4b9c83954455900c2424386e02 /innobase/os | |
parent | 9a1953781acf6de68376ee4a54b8242af7fa2ae3 (diff) | |
parent | c8f6ea2c7c0ae7521025a7ed25d5ee40bd1f9b69 (diff) | |
download | mariadb-git-f7d6288db21cbfc1315403adfcf8f2e59a5f305f.tar.gz |
merged
BitKeeper/etc/logging_ok:
auto-union
Build-tools/Do-compile:
Auto merged
Docs/manual.texi:
Auto merged
innobase/configure.in:
Auto merged
innobase/os/os0file.c:
Auto merged
innobase/os/os0thread.c:
Auto merged
innobase/pars/lexyy.c:
Auto merged
innobase/pars/pars0grm.c:
Auto merged
innobase/pars/pars0grm.y:
Auto merged
innobase/pars/pars0lex.l:
Auto merged
innobase/row/row0mysql.c:
Auto merged
Diffstat (limited to 'innobase/os')
-rw-r--r-- | innobase/os/os0file.c | 25 | ||||
-rw-r--r-- | innobase/os/os0thread.c | 20 |
2 files changed, 45 insertions, 0 deletions
diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c index 3ca0fbd68a4..0297388c413 100644 --- a/innobase/os/os0file.c +++ b/innobase/os/os0file.c @@ -11,6 +11,7 @@ Created 10/21/1995 Heikki Tuuri #include "ut0mem.h" #include "srv0srv.h" #include "fil0fil.h" +#include "buf0buf.h" #undef HAVE_FDATASYNC @@ -2105,6 +2106,7 @@ os_aio_simulated_handle( ibool ret; ulint n; ulint i; + ulint len2; segment = os_aio_get_array_and_local_segment(&array, global_segment); @@ -2260,6 +2262,29 @@ consecutive_loop: /* Do the i/o with ordinary, synchronous i/o functions: */ if (slot->type == OS_FILE_WRITE) { + if (array == os_aio_write_array) { + + /* Do a 'last millisecond' check that the page end + is sensible; reported page checksum errors from + Linux seem to wipe over the page end */ + + for (len2 = 0; len2 + UNIV_PAGE_SIZE <= total_len; + len2 += UNIV_PAGE_SIZE) { + if (mach_read_from_4(combined_buf + len2 + + FIL_PAGE_LSN + 4) + != mach_read_from_4(combined_buf + len2 + + UNIV_PAGE_SIZE + - FIL_PAGE_END_LSN + 4)) { + ut_print_timestamp(stderr); + fprintf(stderr, +" InnoDB: ERROR: The page to be written seems corrupt!\n"); + page_print(combined_buf + len2); + fprintf(stderr, +"InnoDB: ERROR: The page to be written seems corrupt!\n"); + } + } + } + ret = os_file_write(slot->name, slot->file, combined_buf, slot->offset, slot->offset_high, total_len); } else { diff --git a/innobase/os/os0thread.c b/innobase/os/os0thread.c index 13990b6743b..146303b2791 100644 --- a/innobase/os/os0thread.c +++ b/innobase/os/os0thread.c @@ -128,8 +128,28 @@ os_thread_create( pthread_attr_init(&attr); +#ifdef UNIV_AIX + /* We must make sure a thread stack is at least 32 kB, otherwise + InnoDB might crash; we do not know if the default stack size on + AIX is always big enough. An empirical test on AIX-4.3 suggested + the size was 96 kB, though. */ + + ret = pthread_attr_setstacksize(&attr, + (size_t)(PTHREAD_STACK_MIN + 32 * 1024)); + if (ret) { + fprintf(stderr, + "InnoDB: Error: pthread_attr_setstacksize returned %d\n", ret); + exit(1); + } +#endif ret = pthread_create(&pthread, &attr, start_f, arg); + if (ret) { + fprintf(stderr, + "InnoDB: Error: pthread_create returned %d\n", ret); + exit(1); + } + pthread_attr_destroy(&attr); if (srv_set_thread_priorities) { |