diff options
author | unknown <marko@hundin.mysql.fi> | 2004-04-06 16:14:43 +0300 |
---|---|---|
committer | unknown <marko@hundin.mysql.fi> | 2004-04-06 16:14:43 +0300 |
commit | 80fe399fee3a7752aecdfc888edfcf56a2be7b0a (patch) | |
tree | f7bc427aa7ce4a54802d6e8931ca1dfe64c7bfa8 /innobase/srv | |
parent | d809c4413e9f991bde407690aafdaaa3eaae9232 (diff) | |
download | mariadb-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.c | 243 | ||||
-rw-r--r-- | innobase/srv/srv0start.c | 56 |
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"); |