summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-10-08 16:40:00 +0300
committerunknown <monty@mysql.com>2004-10-08 16:40:00 +0300
commitaa14d7361d3bd6fd6943d8732363f392cb316a65 (patch)
tree58aef043f728310efa92720330d1d0f1346fdf2b /innobase
parentc428135ec8550b62a58ac061733c6c31c277a651 (diff)
parentb5f445a0e9f35809d49faee64b69f45c12e8d877 (diff)
downloadmariadb-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.h4
-rw-r--r--innobase/srv/srv0srv.c20
-rw-r--r--innobase/sync/sync0arr.c15
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);
}
/**************************************************************************