1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

InnoDB: tolerate system clock glitches a little better

in the error monitor thread.  (Bug #5898)


innobase/include/sync0arr.h:
  sync_array_print_long_waits(): return error status
innobase/srv/srv0srv.c:
  srv_error_monitor_thread(): Keep track on successive fatal timeouts,
  and crash the server only if the timeouts have been exceeded for
  several times in succession.
innobase/sync/sync0arr.c:
  sync_array_print_long_waits(): return error status
This commit is contained in:
unknown
2004-10-07 15:58:47 +03:00
parent 1601646a88
commit 7949ffc86a
3 changed files with 26 additions and 13 deletions

View File

@ -1754,7 +1754,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;
#ifdef UNIV_DEBUG_THREAD_CREATION
fprintf(stderr, "Error monitor thread starts, id %lu\n",
@ -1763,8 +1764,6 @@ srv_error_monitor_thread(
loop:
srv_error_monitor_active = TRUE;
cnt++;
os_thread_sleep(2000000);
if (difftime(time(NULL), srv_last_monitor_time) > 60) {
@ -1774,7 +1773,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 */