summaryrefslogtreecommitdiff
path: root/innobase/srv
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-04-06 16:14:43 +0300
committerunknown <marko@hundin.mysql.fi>2004-04-06 16:14:43 +0300
commit80fe399fee3a7752aecdfc888edfcf56a2be7b0a (patch)
treef7bc427aa7ce4a54802d6e8931ca1dfe64c7bfa8 /innobase/srv
parentd809c4413e9f991bde407690aafdaaa3eaae9232 (diff)
downloadmariadb-git-80fe399fee3a7752aecdfc888edfcf56a2be7b0a.tar.gz
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers innobase/btr/btr0btr.c: Output to stderr; quote table and index names innobase/btr/btr0cur.c: Output to stderr; quote table and index names innobase/btr/btr0sea.c: Output to stderr innobase/buf/buf0buf.c: Output to stderr; quote table and index names innobase/buf/buf0flu.c: Output to stderr innobase/buf/buf0lru.c: Output to stderr innobase/buf/buf0rea.c: Output to stderr innobase/data/data0data.c: Remove dtuple_validate() unless #ifdef UNIV_DEBUG Remove unnecessary sprintf() calls Output to stderr innobase/data/data0type.c: Output to stderr innobase/dict/dict0boot.c: Remove dummy call to printf() innobase/dict/dict0crea.c: Output diagnostic information to stream, not to memory innobase/dict/dict0dict.c: Output diagnostics to a file, not to a memory buffer innobase/dict/dict0load.c: Output to stderr; quote table and index names innobase/eval/eval0eval.c: Output to stderr innobase/fil/fil0fil.c: Output to stderr innobase/fsp/fsp0fsp.c: Output to stderr Avoid sprintf() innobase/fut/fut0lst.c: Output to stderr innobase/ha/ha0ha.c: Output to stream, not to memory buffer innobase/ibuf/ibuf0ibuf.c: Output to stderr Avoid sprintf() innobase/include/buf0buf.h: Output to stream, not to memory buffer innobase/include/buf0buf.ic: Use %p for displaying pointers innobase/include/data0data.h: Remove dtuple_sprintf() innobase/include/dict0dict.h: Output to stream, not to memory buffer innobase/include/ha0ha.h: Output to stream, not to memory buffer innobase/include/ibuf0ibuf.h: Output to stream, not to memory buffer innobase/include/lock0lock.h: Output to stream, not to memory buffer innobase/include/log0log.h: Output to stream, not to memory buffer innobase/include/mtr0log.ic: Output to stderr Display pointers with %p innobase/include/os0file.h: Output to stream, not to memory buffer innobase/include/rem0rec.h: Remove rec_sprintf() innobase/include/rem0rec.ic: Output to stderr innobase/include/row0sel.ic: Output to stderr innobase/include/row0upd.ic: Quote table and index names innobase/include/srv0srv.h: Remove srv_sprintf_innodb_monitor() innobase/include/sync0arr.h: Output to stream, not to memory buffer innobase/include/sync0sync.h: Output to stream, not to memory buffer innobase/include/trx0sys.h: Output to stderr innobase/include/trx0trx.h: Output to stream, not to memory buffer innobase/include/ut0ut.h: Remove ut_sprintf_buf() Add ut_print_name(), ut_print_namel() and ut_copy_file() innobase/lock/lock0lock.c: Output to stream, not to memory buffer innobase/log/log0log.c: Output to stderr innobase/log/log0recv.c: Output to stderr innobase/mem/mem0dbg.c: Output to stderr innobase/mtr/mtr0log.c: Display pointers with %p innobase/mtr/mtr0mtr.c: Output to stderr innobase/os/os0file.c: Output to stream, not to memory buffer innobase/os/os0proc.c: Output to stderr innobase/os/os0thread.c: Output to stderr innobase/page/page0cur.c: Output to stderr innobase/page/page0page.c: Avoid sprintf() Output to stderr instead of stdout innobase/pars/pars0opt.c: Output to stderr instead of stdout innobase/rem/rem0rec.c: Remove rec_sprintf() Output to stderr instead of stdout innobase/row/row0ins.c: Output diagnostics to stream instead of memory buffer innobase/row/row0mysql.c: Output to stderr instead of stdout Quote table and index names innobase/row/row0purge.c: Output to stderr instead of stdout innobase/row/row0row.c: Quote table and index names innobase/row/row0sel.c: Output to stderr instead of stdout Quote table and index names innobase/row/row0umod.c: Avoid sprintf() Quote table and index names innobase/row/row0undo.c: Output to stderr instead of stdout innobase/row/row0upd.c: Avoid sprintf() innobase/srv/srv0srv.c: Output to stderr instead of stdout innobase/srv/srv0start.c: Handle srv_monitor_file Make some global variables static innobase/sync/sync0arr.c: Output to stderr instead of stdout Output to stream instead of memory buffer innobase/sync/sync0rw.c: Output to stderr instead of stdout innobase/sync/sync0sync.c: Output to stderr instead of stdout Output to stream instead of memory buffer innobase/trx/trx0purge.c: Output to stderr instead of stdout innobase/trx/trx0rec.c: Quote index and table names Avoid sprintf() innobase/trx/trx0roll.c: Quote identifier names Output to stderr instead of stdout innobase/trx/trx0sys.c: Output to stderr instead of stdout innobase/trx/trx0trx.c: Output to stream instead of memory buffer innobase/trx/trx0undo.c: Output to stderr instead of stdout innobase/ut/ut0ut.c: Declare mysql_get_identifier_quote_char() Remove ut_sprintf_buf() Add ut_print_name() and ut_print_namel() Add ut_copy_file() sql/ha_innodb.cc: innobase_mysql_print_thd(): output to stream, not to memory buffer Add mysql_get_identifier_quote_char() Remove unused function innobase_print_error() Display pointers with %p Buffer InnoDB output via files, not via statically allocated memory
Diffstat (limited to 'innobase/srv')
-rw-r--r--innobase/srv/srv0srv.c243
-rw-r--r--innobase/srv/srv0start.c56
2 files changed, 153 insertions, 146 deletions
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
index 87e15037fb6..cee6dec850e 100644
--- a/innobase/srv/srv0srv.c
+++ b/innobase/srv/srv0srv.c
@@ -52,9 +52,6 @@ Created 10/8/1995 Heikki Tuuri
affects only FOREIGN KEY definition parsing */
ibool srv_lower_case_table_names = FALSE;
-/* Buffer which can be used in printing fatal error messages */
-char srv_fatal_errbuf[5000];
-
/* The following counter is incremented whenever there is some user activity
in the server */
ulint srv_activity_count = 0;
@@ -290,7 +287,12 @@ const char* srv_io_thread_function[SRV_MAX_N_IO_THREADS];
time_t srv_last_monitor_time;
-mutex_t srv_innodb_monitor_mutex;
+mutex_t srv_innodb_monitor_mutex;
+
+/* Mutex for locking srv_monitor_file */
+mutex_t srv_monitor_file_mutex;
+/* Temporary file for innodb monitor output */
+FILE* srv_monitor_file;
ulint srv_main_thread_process_no = 0;
ulint srv_main_thread_id = 0;
@@ -627,9 +629,10 @@ srv_suspend_thread(void)
slot_no = thr_local_get_slot_no(os_thread_get_curr_id());
if (srv_print_thread_releases) {
-
- printf("Suspending thread %lu to slot %lu meter %lu\n",
- os_thread_get_curr_id(), slot_no, srv_meter[SRV_RECOVERY]);
+ fprintf(stderr,
+ "Suspending thread %lu to slot %lu meter %lu\n",
+ os_thread_get_curr_id(), slot_no,
+ srv_meter[SRV_RECOVERY]);
}
slot = srv_table_get_nth_slot(slot_no);
@@ -689,7 +692,7 @@ srv_release_threads(
os_event_set(slot->event);
if (srv_print_thread_releases) {
- printf(
+ fprintf(stderr,
"Releasing thread %lu type %lu from slot %lu meter %lu\n",
slot->id, type, i, srv_meter[SRV_RECOVERY]);
}
@@ -847,7 +850,6 @@ srv_conc_enter_innodb(
ibool has_slept = FALSE;
srv_conc_slot_t* slot = NULL;
ulint i;
- char err_buf[1000];
if (srv_thread_concurrency >= 500) {
/* Disable the concurrency check */
@@ -868,12 +870,11 @@ srv_conc_enter_innodb(
retry:
if (trx->declared_to_be_inside_innodb) {
ut_print_timestamp(stderr);
-
- trx_print(err_buf, trx);
-
- fprintf(stderr,
+ fputs(
" InnoDB: Error: trying to declare trx to enter InnoDB, but\n"
-"InnoDB: it already is declared.\n%s\n", err_buf);
+"InnoDB: it already is declared.\n", stderr);
+ trx_print(stderr, trx);
+ putc('\n', stderr);
os_fast_mutex_unlock(&srv_conc_mutex);
return;
@@ -1403,15 +1404,13 @@ srv_refresh_innodb_monitor_stats(void)
}
/**********************************************************************
-Sprintfs to a buffer the output of the InnoDB Monitor. */
+Outputs to a file the output of the InnoDB Monitor. */
void
-srv_sprintf_innodb_monitor(
-/*=======================*/
- char* buf, /* in/out: buffer which must be at least 4 kB */
- ulint len) /* in: length of the buffer */
+srv_printf_innodb_monitor(
+/*======================*/
+ FILE* file) /* in: output stream */
{
- char* buf_end = buf + len - 2000;
double time_elapsed;
time_t current_time;
ulint n_reserved;
@@ -1429,28 +1428,20 @@ srv_sprintf_innodb_monitor(
srv_last_monitor_time = time(NULL);
- ut_a(len >= 4096);
+ rewind(file);
+ fputs("\n=====================================\n", file);
- buf += sprintf(buf, "\n=====================================\n");
+ ut_print_timestamp(file);
+ fprintf(file,
+ " INNODB MONITOR OUTPUT\n"
+ "=====================================\n"
+ "Per second averages calculated from the last %lu seconds\n",
+ (ulong)time_elapsed);
- ut_sprintf_timestamp(buf);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- buf += sprintf(buf, " INNODB MONITOR OUTPUT\n"
- "=====================================\n");
-
- buf += sprintf(buf,
-"Per second averages calculated from the last %lu seconds\n",
- (ulint)time_elapsed);
-
- buf += sprintf(buf, "----------\n"
- "SEMAPHORES\n"
- "----------\n");
- sync_print(buf, buf_end);
-
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
+ fputs("----------\n"
+ "SEMAPHORES\n"
+ "----------\n", file);
+ sync_print(file);
/* Conceptually, srv_innodb_monitor_mutex has a very high latching
order level in sync0sync.h, while dict_foreign_err_mutex has a very
@@ -1459,43 +1450,29 @@ srv_sprintf_innodb_monitor(
mutex_enter(&dict_foreign_err_mutex);
- if (*dict_foreign_err_buf != '\0') {
- buf += sprintf(buf,
- "------------------------\n"
- "LATEST FOREIGN KEY ERROR\n"
- "------------------------\n");
-
- if (buf_end - buf > 6000) {
- buf+= sprintf(buf, "%.4000s", dict_foreign_err_buf);
- }
- }
+ if (ftell(dict_foreign_err_file) != 0L) {
+ fputs("------------------------\n"
+ "LATEST FOREIGN KEY ERROR\n"
+ "------------------------\n", file);
+ ut_copy_file(file, dict_foreign_err_file);
+ }
mutex_exit(&dict_foreign_err_mutex);
- ut_a(buf < buf_end + 1500);
+ lock_print_info(file);
+ fputs("--------\n"
+ "FILE I/O\n"
+ "--------\n", file);
+ os_aio_print(file);
- lock_print_info(buf, buf_end);
- buf = buf + strlen(buf);
-
- buf += sprintf(buf, "--------\n"
- "FILE I/O\n"
- "--------\n");
- os_aio_print(buf, buf_end);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- buf += sprintf(buf, "-------------------------------------\n"
- "INSERT BUFFER AND ADAPTIVE HASH INDEX\n"
- "-------------------------------------\n");
- ibuf_print(buf, buf_end);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- ha_print_info(buf, buf_end, btr_search_sys->hash_index);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- buf += sprintf(buf,
+ fputs("-------------------------------------\n"
+ "INSERT BUFFER AND ADAPTIVE HASH INDEX\n"
+ "-------------------------------------\n", file);
+ ibuf_print(file);
+
+ ha_print_info(file, btr_search_sys->hash_index);
+
+ fprintf(file,
"%.2f hash searches/s, %.2f non-hash searches/s\n",
(btr_cur_n_sea - btr_cur_n_sea_old)
/ time_elapsed,
@@ -1504,57 +1481,50 @@ srv_sprintf_innodb_monitor(
btr_cur_n_sea_old = btr_cur_n_sea;
btr_cur_n_non_sea_old = btr_cur_n_non_sea;
- buf += sprintf(buf,"---\n"
+ fputs("---\n"
"LOG\n"
- "---\n");
- log_print(buf, buf_end);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- buf += sprintf(buf, "----------------------\n"
+ "---\n", file);
+ log_print(file);
+
+ fputs("----------------------\n"
"BUFFER POOL AND MEMORY\n"
- "----------------------\n");
- buf += sprintf(buf,
+ "----------------------\n", file);
+ fprintf(file,
"Total memory allocated %lu; in additional pool allocated %lu\n",
ut_total_allocated_memory,
mem_pool_get_reserved(mem_comm_pool));
- buf_print_io(buf, buf_end);
- buf = buf + strlen(buf);
- ut_a(buf < buf_end + 1500);
-
- buf += sprintf(buf, "--------------\n"
- "ROW OPERATIONS\n"
- "--------------\n");
- buf += sprintf(buf,
- "%ld queries inside InnoDB, %lu queries in queue\n",
+ buf_print_io(file);
+
+ fputs("--------------\n"
+ "ROW OPERATIONS\n"
+ "--------------\n", file);
+ fprintf(file, "%ld queries inside InnoDB, %lu queries in queue\n",
srv_conc_n_threads, srv_conc_n_waiting_threads);
n_reserved = fil_space_get_n_reserved_extents(0);
if (n_reserved > 0) {
- buf += sprintf(buf,
+ fprintf(file,
"%lu tablespace extents now reserved for B-tree split operations\n",
n_reserved);
}
#ifdef UNIV_LINUX
- buf += sprintf(buf,
- "Main thread process no. %lu, id %lu, state: %.29s\n",
+ fprintf(file, "Main thread process no. %lu, id %lu, state: %s\n",
srv_main_thread_process_no,
srv_main_thread_id,
srv_main_thread_op_info);
#else
- buf += sprintf(buf,
- "Main thread id %lu, state: %.29s\n",
+ fprintf(file, "Main thread id %lu, state: %s\n",
srv_main_thread_id,
srv_main_thread_op_info);
#endif
- buf += sprintf(buf,
+ fprintf(file,
"Number of rows inserted %lu, updated %lu, deleted %lu, read %lu\n",
srv_n_rows_inserted,
srv_n_rows_updated,
srv_n_rows_deleted,
srv_n_rows_read);
- buf += sprintf(buf,
+ fprintf(file,
"%.2f inserts/s, %.2f updates/s, %.2f deletes/s, %.2f reads/s\n",
(srv_n_rows_inserted - srv_n_rows_inserted_old)
/ time_elapsed,
@@ -1570,12 +1540,12 @@ srv_sprintf_innodb_monitor(
srv_n_rows_deleted_old = srv_n_rows_deleted;
srv_n_rows_read_old = srv_n_rows_read;
- buf += sprintf(buf, "----------------------------\n"
+ fputs("----------------------------\n"
"END OF INNODB MONITOR OUTPUT\n"
- "============================\n");
- ut_a(buf < buf_end + 1900);
+ "============================\n", file);
mutex_exit(&srv_innodb_monitor_mutex);
+ fflush(file);
}
/*************************************************************************
@@ -1601,13 +1571,13 @@ srv_lock_timeout_and_monitor_thread(
time_t last_monitor_time;
ibool some_waits;
double wait_time;
- char* buf;
ulint i;
#ifdef UNIV_DEBUG_THREAD_CREATION
- printf("Lock timeout thread starts, id %lu\n",
+ fprintf(stderr, "Lock timeout thread starts, id %lu\n",
os_thread_pf(os_thread_get_curr_id()));
#endif
+ UT_NOT_USED(arg);
srv_last_monitor_time = time(NULL);
last_table_monitor_time = time(NULL);
last_monitor_time = time(NULL);
@@ -1633,55 +1603,56 @@ loop:
last_monitor_time = time(NULL);
if (srv_print_innodb_monitor) {
+ srv_printf_innodb_monitor(stderr);
+ }
- buf = mem_alloc(100000);
-
- srv_sprintf_innodb_monitor(buf, 90000);
-
- ut_a(strlen(buf) < 99000);
-
- printf("%s", buf);
-
- mem_free(buf);
- }
+ mutex_enter(&srv_monitor_file_mutex);
+ rewind(srv_monitor_file);
+ srv_printf_innodb_monitor(srv_monitor_file);
+ mutex_exit(&srv_monitor_file_mutex);
- if (srv_print_innodb_tablespace_monitor
- && difftime(current_time, last_table_monitor_time) > 60) {
+ if (srv_print_innodb_tablespace_monitor
+ && difftime(current_time, last_table_monitor_time) > 60) {
last_table_monitor_time = time(NULL);
- printf("================================================\n");
+ fputs("================================================\n",
+ stderr);
- ut_print_timestamp(stdout);
+ ut_print_timestamp(stderr);
- printf(" INNODB TABLESPACE MONITOR OUTPUT\n"
- "================================================\n");
+ fputs(" INNODB TABLESPACE MONITOR OUTPUT\n"
+ "================================================\n",
+ stderr);
fsp_print(0);
- fprintf(stderr, "Validating tablespace\n");
+ fputs("Validating tablespace\n", stderr);
fsp_validate(0);
- fprintf(stderr, "Validation ok\n");
- printf("---------------------------------------\n"
+ fputs("Validation ok\n"
+ "---------------------------------------\n"
"END OF INNODB TABLESPACE MONITOR OUTPUT\n"
- "=======================================\n");
+ "=======================================\n",
+ stderr);
}
if (srv_print_innodb_table_monitor
- && difftime(current_time, last_table_monitor_time) > 60) {
+ && difftime(current_time, last_table_monitor_time) > 60) {
last_table_monitor_time = time(NULL);
- printf("===========================================\n");
+ fputs("===========================================\n", stderr);
- ut_print_timestamp(stdout);
+ ut_print_timestamp(stderr);
- printf(" INNODB TABLE MONITOR OUTPUT\n"
- "===========================================\n");
+ fputs(" INNODB TABLE MONITOR OUTPUT\n"
+ "===========================================\n",
+ stderr);
dict_print();
- printf("-----------------------------------\n"
+ fputs("-----------------------------------\n"
"END OF INNODB TABLE MONITOR OUTPUT\n"
- "==================================\n");
+ "==================================\n",
+ stderr);
}
}
@@ -1740,8 +1711,11 @@ loop:
srv_lock_timeout_and_monitor_active = FALSE;
+#if 0
+ /* The following synchronisation is disabled, since
+ the InnoDB monitor output is to be updated every 15 seconds. */
os_event_wait(srv_lock_timeout_thread_event);
-
+#endif
goto loop;
exit_func:
@@ -1777,7 +1751,7 @@ srv_error_monitor_thread(
ulint cnt = 0;
#ifdef UNIV_DEBUG_THREAD_CREATION
- printf("Error monitor thread starts, id %lu\n",
+ fprintf(stderr, "Error monitor thread starts, id %lu\n",
os_thread_pf(os_thread_get_curr_id()));
#endif
loop:
@@ -1796,11 +1770,10 @@ loop:
sync_array_print_long_waits();
- /* Flush stdout and stderr so that a database user gets their output
+ /* Flush stderr so that a database user gets the output
to possible MySQL error file */
fflush(stderr);
- fflush(stdout);
if (srv_shutdown_state < SRV_SHUTDOWN_LAST_PHASE) {
@@ -1892,7 +1865,7 @@ srv_master_thread(
ulint i;
#ifdef UNIV_DEBUG_THREAD_CREATION
- printf("Master thread starts, id %lu\n",
+ fprintf(stderr, "Master thread starts, id %lu\n",
os_thread_pf(os_thread_get_curr_id()));
#endif
srv_main_thread_process_no = os_proc_get_number();
diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c
index d505c8779dc..f9b66b6e5fc 100644
--- a/innobase/srv/srv0start.c
+++ b/innobase/srv/srv0start.c
@@ -55,13 +55,13 @@ Created 2/16/1996 Heikki Tuuri
#include "srv0start.h"
#include "que0que.h"
-ibool srv_start_has_been_called = FALSE;
+static ibool srv_start_has_been_called = FALSE;
ulint srv_sizeof_trx_t_in_ha_innodb_cc;
ibool srv_startup_is_before_trx_rollback_phase = FALSE;
ibool srv_is_being_started = FALSE;
-ibool srv_was_started = FALSE;
+static ibool srv_was_started = FALSE;
/* At a shutdown the value first climbs to SRV_SHUTDOWN_CLEANUP
and then to SRV_SHUTDOWN_LAST_PHASE */
@@ -69,19 +69,20 @@ ulint srv_shutdown_state = 0;
ibool measure_cont = FALSE;
-os_file_t files[1000];
+static os_file_t files[1000];
-mutex_t ios_mutex;
-ulint ios;
+static mutex_t ios_mutex;
+static ulint ios;
-ulint n[SRV_MAX_N_IO_THREADS + 5];
-os_thread_id_t thread_ids[SRV_MAX_N_IO_THREADS + 5];
+static ulint n[SRV_MAX_N_IO_THREADS + 5];
+static os_thread_id_t thread_ids[SRV_MAX_N_IO_THREADS + 5];
/* We use this mutex to test the return value of pthread_mutex_trylock
on successful locking. HP-UX does NOT return 0, though Linux et al do. */
-os_fast_mutex_t srv_os_test_mutex;
+static os_fast_mutex_t srv_os_test_mutex;
-ibool srv_os_test_mutex_is_locked = FALSE;
+/* Name of srv_monitor_file */
+static char* srv_monitor_file_name;
#define SRV_N_PENDING_IOS_PER_THREAD OS_AIO_N_PENDING_IOS_PER_THREAD
#define SRV_MAX_N_PENDING_SYNC_IOS 100
@@ -400,8 +401,8 @@ io_handler_thread(
segment = *((ulint*)arg);
#ifdef UNIV_DEBUG_THREAD_CREATION
- printf("Io handler thread %lu starts, id %lu\n", segment,
- os_thread_pf(os_thread_get_curr_id()));
+ fprintf(stderr, "Io handler thread %lu starts, id %lu\n", segment,
+ os_thread_pf(os_thread_get_curr_id()));
#endif
for (i = 0;; i++) {
fil_aio_wait(segment);
@@ -532,6 +533,8 @@ open_or_create_log_file(
srv_log_group_home_dirs[k] = srv_add_path_separator_if_needed(
srv_log_group_home_dirs[k]);
+ ut_a(strlen(srv_log_group_home_dirs[k]) <
+ (sizeof name) - 10 - sizeof "ib_logfile");
sprintf(name, "%s%s%lu", srv_log_group_home_dirs[k], "ib_logfile", i);
files[i] = os_file_create(name, OS_FILE_CREATE, OS_FILE_NORMAL,
@@ -680,6 +683,8 @@ open_or_create_data_files(
for (i = 0; i < srv_n_data_files; i++) {
srv_normalize_path_for_win(srv_data_file_names[i]);
+ ut_a(strlen(srv_data_home) + strlen(srv_data_file_names[i])
+ < (sizeof name) - 1);
sprintf(name, "%s%s", srv_data_home, srv_data_file_names[i]);
files[i] = os_file_create(name, OS_FILE_CREATE,
@@ -1016,6 +1021,19 @@ NetWare. */
return((int) err);
}
+ mutex_create(&srv_monitor_file_mutex);
+ srv_monitor_file_name = mem_alloc(
+ strlen(fil_path_to_mysql_datadir) +
+ 20 + sizeof "/innodb_status.");
+ sprintf(srv_monitor_file_name, "%s/innodb.status.%lu",
+ fil_path_to_mysql_datadir, os_proc_get_number());
+ srv_monitor_file = fopen(srv_monitor_file_name, "w+");
+ if (!srv_monitor_file) {
+ fprintf(stderr, "InnoDB: unable to create %s: %s\n",
+ srv_monitor_file_name, strerror(errno));
+ return(DB_ERROR);
+ }
+
/* Restrict the maximum number of file i/o threads */
if (srv_n_file_io_threads > SRV_MAX_N_IO_THREADS) {
@@ -1505,6 +1523,15 @@ innobase_shutdown_for_mysql(void)
os_thread_count);
}
+ if (srv_monitor_file) {
+ fclose(srv_monitor_file);
+ srv_monitor_file = 0;
+ unlink(srv_monitor_file_name);
+ mem_free(srv_monitor_file_name);
+ }
+
+ mutex_free(&srv_monitor_file_mutex);
+
/* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside
them */
@@ -1531,6 +1558,13 @@ innobase_shutdown_for_mysql(void)
os_fast_mutex_count);
}
+ if (dict_foreign_err_file) {
+ fclose(dict_foreign_err_file);
+ }
+ if (lock_latest_err_file) {
+ fclose(lock_latest_err_file);
+ }
+
if (srv_print_verbose_log) {
ut_print_timestamp(stderr);
fprintf(stderr, " InnoDB: Shutdown completed\n");