diff options
author | unknown <monty@mysql.com> | 2004-10-08 16:40:00 +0300 |
---|---|---|
committer | unknown <monty@mysql.com> | 2004-10-08 16:40:00 +0300 |
commit | aa14d7361d3bd6fd6943d8732363f392cb316a65 (patch) | |
tree | 58aef043f728310efa92720330d1d0f1346fdf2b /innobase | |
parent | c428135ec8550b62a58ac061733c6c31c277a651 (diff) | |
parent | b5f445a0e9f35809d49faee64b69f45c12e8d877 (diff) | |
download | mariadb-git-aa14d7361d3bd6fd6943d8732363f392cb316a65.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/my/mysql-4.1
BitKeeper/etc/logging_ok:
auto-union
Diffstat (limited to 'innobase')
-rw-r--r-- | innobase/include/sync0arr.h | 4 | ||||
-rw-r--r-- | innobase/srv/srv0srv.c | 20 | ||||
-rw-r--r-- | innobase/sync/sync0arr.c | 15 |
3 files changed, 26 insertions, 13 deletions
diff --git a/innobase/include/sync0arr.h b/innobase/include/sync0arr.h index 92691d5fdd9..fecd910683e 100644 --- a/innobase/include/sync0arr.h +++ b/innobase/include/sync0arr.h @@ -97,9 +97,11 @@ sync_arr_wake_threads_if_sema_free(void); /************************************************************************** Prints warnings of long semaphore waits to stderr. */ -void +ibool sync_array_print_long_waits(void); /*=============================*/ + /* out: TRUE if fatal semaphore wait threshold + was exceeded */ /************************************************************************ Validates the integrity of the wait array. Checks that the number of reserved cells equals the count variable. */ diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c index adffe06ef0a..94930b24e78 100644 --- a/innobase/srv/srv0srv.c +++ b/innobase/srv/srv0srv.c @@ -1810,7 +1810,8 @@ srv_error_monitor_thread( /* in: a dummy parameter required by os_thread_create */ { - ulint cnt = 0; + /* number of successive fatal timeouts observed */ + ulint fatal_cnt = 0; dulint old_lsn; dulint new_lsn; @@ -1823,8 +1824,6 @@ srv_error_monitor_thread( loop: srv_error_monitor_active = TRUE; - cnt++; - /* Try to track a strange bug reported by Harald Fuchs and others, where the lsn seems to decrease at times */ @@ -1851,7 +1850,20 @@ loop: srv_refresh_innodb_monitor_stats(); } - sync_array_print_long_waits(); + if (sync_array_print_long_waits()) { + fatal_cnt++; + if (fatal_cnt > 5) { + + fprintf(stderr, +"InnoDB: Error: semaphore wait has lasted > %lu seconds\n" +"InnoDB: We intentionally crash the server, because it appears to be hung.\n", + srv_fatal_semaphore_wait_threshold); + + ut_error; + } + } else { + fatal_cnt = 0; + } /* Flush stderr so that a database user gets the output to possible MySQL error file */ diff --git a/innobase/sync/sync0arr.c b/innobase/sync/sync0arr.c index e5285cb7ebf..198ef49ca9f 100644 --- a/innobase/sync/sync0arr.c +++ b/innobase/sync/sync0arr.c @@ -894,15 +894,18 @@ sync_arr_wake_threads_if_sema_free(void) /************************************************************************** Prints warnings of long semaphore waits to stderr. */ -void +ibool sync_array_print_long_waits(void) /*=============================*/ + /* out: TRUE if fatal semaphore wait threshold + was exceeded */ { sync_cell_t* cell; ibool old_val; ibool noticed = FALSE; ulint i; ulint fatal_timeout = srv_fatal_semaphore_wait_threshold; + ibool fatal = FALSE; for (i = 0; i < sync_primary_wait_array->n_cells; i++) { @@ -919,13 +922,7 @@ sync_array_print_long_waits(void) if (cell->wait_object != NULL && difftime(time(NULL), cell->reservation_time) > fatal_timeout) { - - fprintf(stderr, -"InnoDB: Error: semaphore wait has lasted > %lu seconds\n" -"InnoDB: We intentionally crash the server, because it appears to be hung.\n", - fatal_timeout); - - ut_error; + fatal = TRUE; } } @@ -953,6 +950,8 @@ sync_array_print_long_waits(void) fprintf(stderr, "InnoDB: ###### Diagnostic info printed to the standard error stream\n"); } + + return(fatal); } /************************************************************************** |