summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
Diffstat (limited to 'innobase')
-rw-r--r--innobase/configure.in2
-rw-r--r--innobase/os/os0file.c25
-rw-r--r--innobase/os/os0thread.c20
-rw-r--r--innobase/row/row0mysql.c12
4 files changed, 56 insertions, 3 deletions
diff --git a/innobase/configure.in b/innobase/configure.in
index 237db834f7a..761859e5da3 100644
--- a/innobase/configure.in
+++ b/innobase/configure.in
@@ -90,6 +90,8 @@ case "$target_os" in
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE -DUNIV_HPUX -DUNIV_HPUX10";;
hp*)
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE -DUNIV_HPUX";;
+ aix*)
+ CFLAGS="$CFLAGS -DUNIV_AIX";;
irix*)
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
osf*)
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) {
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 3ee458f43bf..43eef8c5092 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -1350,7 +1350,9 @@ row_create_table_for_mysql(
"InnoDB: creating an InnoDB table with the same name in another\n"
"InnoDB: database and moving the .frm file to the current database.\n"
"InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n"
- "InnoDB: succeed.\n");
+ "InnoDB: succeed.\n"
+ "InnoDB: You can look further help from section 15.1 of\n"
+ "InnoDB: http://www.innodb.com/ibman.html\n");
}
trx->error_state = DB_SUCCESS;
@@ -1872,7 +1874,9 @@ row_drop_table_for_mysql(
" InnoDB: Error: table %s does not exist in the InnoDB internal\n"
"InnoDB: data dictionary though MySQL is trying to drop it.\n"
"InnoDB: Have you copied the .frm file of the table to the\n"
- "InnoDB: MySQL database directory from another database?\n",
+ "InnoDB: MySQL database directory from another database?\n"
+ "InnoDB: You can look further help from section 15.1 of\n"
+ "InnoDB: http://www.innodb.com/ibman.html\n",
name);
goto funct_exit;
}
@@ -2194,7 +2198,9 @@ row_rename_table_for_mysql(
fprintf(stderr,
" InnoDB: Error: table %s exists in the InnoDB internal data\n"
"InnoDB: dictionary though MySQL is trying rename table %s to it.\n"
- "InnoDB: Have you deleted the .frm file and not used DROP TABLE?\n",
+ "InnoDB: Have you deleted the .frm file and not used DROP TABLE?\n"
+ "InnoDB: You can look further help from section 15.1 of\n"
+ "InnoDB: http://www.innodb.com/ibman.html\n",
new_name, old_name);
fprintf(stderr,