=== modified file 'sql/mysqld.cc' --- sql/mysqld.cc 2012-06-29 11:36:01 +0000 +++ sql/mysqld.cc 2012-09-15 10:17:21 +0000 @@ -421,6 +421,7 @@ my_bool use_temp_pool, relay_log_purge; my_bool relay_log_recovery; my_bool opt_sync_frm, opt_allow_suspicious_udfs; +my_bool opt_free_bp_before_write_core; my_bool opt_secure_auth= 0; char* opt_secure_file_priv; my_bool opt_log_slow_admin_statements= 0; === modified file 'sql/mysqld.h' --- sql/mysqld.h 2012-06-12 07:29:56 +0000 +++ sql/mysqld.h 2012-09-15 10:17:21 +0000 @@ -110,6 +110,7 @@ extern my_bool read_only, opt_readonly; extern my_bool lower_case_file_system; extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs; +extern my_bool opt_free_bp_before_write_core; extern my_bool opt_secure_auth; extern char* opt_secure_file_priv; extern char* opt_secure_backup_file_priv; === modified file 'sql/signal_handler.cc' --- sql/signal_handler.cc 2012-03-06 12:47:57 +0000 +++ sql/signal_handler.cc 2012-09-15 10:23:52 +0000 @@ -38,6 +38,13 @@ extern volatile sig_atomic_t ld_assume_kernel_is_set; #endif + void (*g_cb_func)(void); + + extern "C"void set_cb_free_bp(void (*cb_func)(void)) + { + g_cb_func= cb_func; + } + /** * Handler for fatal signals * @@ -243,6 +250,8 @@ #ifdef HAVE_WRITE_CORE if (test_flags & TEST_CORE_ON_SIGNAL) { + if (opt_free_bp_before_write_core && g_cb_func) + g_cb_func(); my_safe_printf_stderr("%s", "Writing a core file\n"); my_write_core(sig); } === modified file 'sql/sys_vars.cc' --- sql/sys_vars.cc 2012-06-12 07:29:56 +0000 +++ sql/sys_vars.cc 2012-09-15 10:17:21 +0000 @@ -2149,6 +2149,11 @@ GLOBAL_VAR(opt_sync_frm), CMD_LINE(OPT_ARG), DEFAULT(TRUE)); +static Sys_var_mybool Sys_free_bp_before_write_core( + "free_bp_before_write_core", "TRUE means to free buffer pool in InnoDB before writting a core file", + GLOBAL_VAR(opt_free_bp_before_write_core), CMD_LINE(OPT_ARG), + DEFAULT(FALSE)); + static char *system_time_zone_ptr; static Sys_var_charptr Sys_system_time_zone( "system_time_zone", "The server system time zone", === modified file 'storage/innobase/srv/srv0start.c' --- storage/innobase/srv/srv0start.c 2012-04-23 10:39:16 +0000 +++ storage/innobase/srv/srv0start.c 2012-09-15 10:17:21 +0000 @@ -1007,6 +1007,11 @@ return(DB_SUCCESS); } +void buf_pool_all_free() +{ + buf_pool_free(srv_buf_pool_instances); +} + /******************************************************************** Starts InnoDB and creates a new database if database files are not found and the user wants. @@ -1396,6 +1401,7 @@ } err = buf_pool_init(srv_buf_pool_size, srv_buf_pool_instances); + set_cb_free_bp(buf_pool_all_free); ut_print_timestamp(stderr); fprintf(stderr,