mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 12:56:14 +01:00 
			
		
		
		
	SHOW ENGINE INNODB MUTEX functionality is completely removed, as are the InnoDB latching order checks. We will enforce innodb_fatal_semaphore_wait_threshold only for dict_sys.mutex and lock_sys.mutex. dict_sys_t::mutex_lock(): A single entry point for dict_sys.mutex. lock_sys_t::mutex_lock(): A single entry point for lock_sys.mutex. FIXME: srv_sys should be removed altogether; it is duplicating tpool functionality. fil_crypt_threads_init(): To prevent SAFE_MUTEX warnings, we must not hold fil_system.mutex. fil_close_all_files(): To prevent SAFE_MUTEX warnings for fil_space_destroy_crypt_data(), we must not hold fil_system.mutex while invoking fil_space_free_low() on a detached tablespace.
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*****************************************************************************
 | 
						|
 | 
						|
Copyright (c) 2014, 2016, Oracle and/or its affiliates. All Rights Reserved.
 | 
						|
Copyright (c) 2019, 2020, MariaDB Corporation.
 | 
						|
 | 
						|
This program is free software; you can redistribute it and/or modify it under
 | 
						|
the terms of the GNU General Public License as published by the Free Software
 | 
						|
Foundation; version 2 of the License.
 | 
						|
 | 
						|
This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
						|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License along with
 | 
						|
this program; if not, write to the Free Software Foundation, Inc.,
 | 
						|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
 | 
						|
 | 
						|
*****************************************************************************/
 | 
						|
 | 
						|
/**************************************************//**
 | 
						|
@file ut/ut0new.cc
 | 
						|
Instrumented memory allocator.
 | 
						|
 | 
						|
Created May 26, 2014 Vasil Dimov
 | 
						|
*******************************************************/
 | 
						|
 | 
						|
#include "univ.i"
 | 
						|
#include "ut0new.h"
 | 
						|
/** The total amount of memory currently allocated from the operating
 | 
						|
system with allocate_large(). */
 | 
						|
Atomic_counter<ulint> os_total_large_mem_allocated;
 | 
						|
 | 
						|
/** Maximum number of retries to allocate memory. */
 | 
						|
const size_t	alloc_max_retries = 60;
 | 
						|
 | 
						|
/** Keys for registering allocations with performance schema.
 | 
						|
Keep this list alphabetically sorted. */
 | 
						|
#ifdef BTR_CUR_HASH_ADAPT
 | 
						|
PSI_memory_key	mem_key_ahi;
 | 
						|
#endif /* BTR_CUR_HASH_ADAPT */
 | 
						|
PSI_memory_key	mem_key_buf_buf_pool;
 | 
						|
PSI_memory_key	mem_key_dict_stats_bg_recalc_pool_t;
 | 
						|
PSI_memory_key	mem_key_dict_stats_index_map_t;
 | 
						|
PSI_memory_key	mem_key_dict_stats_n_diff_on_level;
 | 
						|
PSI_memory_key	mem_key_other;
 | 
						|
PSI_memory_key	mem_key_row_log_buf;
 | 
						|
PSI_memory_key	mem_key_row_merge_sort;
 | 
						|
PSI_memory_key	mem_key_std;
 | 
						|
 | 
						|
#ifdef UNIV_PFS_MEMORY
 | 
						|
 | 
						|
/** Auxiliary array of performance schema 'PSI_memory_info'.
 | 
						|
Each allocation appears in
 | 
						|
performance_schema.memory_summary_global_by_event_name (and alike) in the form
 | 
						|
of e.g. 'memory/innodb/NAME' where the last component NAME is picked from
 | 
						|
the list below:
 | 
						|
1. If key is specified, then the respective name is used
 | 
						|
2. Without a specified key, allocations from inside std::* containers use
 | 
						|
   mem_key_std
 | 
						|
3. Without a specified key, allocations from outside std::* pick up the key
 | 
						|
   based on the file name, and if file name is not found in the predefined list
 | 
						|
   (in ut_new_boot()) then mem_key_other is used.
 | 
						|
Keep this list alphabetically sorted. */
 | 
						|
static PSI_memory_info	pfs_info[] = {
 | 
						|
#ifdef BTR_CUR_HASH_ADAPT
 | 
						|
  {&mem_key_ahi, "adaptive hash index", 0},
 | 
						|
#endif /* BTR_CUR_HASH_ADAPT */
 | 
						|
  {&mem_key_buf_buf_pool, "buf_buf_pool", 0},
 | 
						|
  {&mem_key_dict_stats_bg_recalc_pool_t, "dict_stats_bg_recalc_pool_t", 0},
 | 
						|
  {&mem_key_dict_stats_index_map_t, "dict_stats_index_map_t", 0},
 | 
						|
  {&mem_key_dict_stats_n_diff_on_level, "dict_stats_n_diff_on_level", 0},
 | 
						|
  {&mem_key_other, "other", 0},
 | 
						|
  {&mem_key_row_log_buf, "row_log_buf", 0},
 | 
						|
  {&mem_key_row_merge_sort, "row_merge_sort", 0},
 | 
						|
  {&mem_key_std, "std", 0},
 | 
						|
};
 | 
						|
 | 
						|
static const int NKEYS = static_cast<int>UT_ARR_SIZE(auto_event_names)-1;
 | 
						|
static PSI_memory_key auto_event_keys[NKEYS];
 | 
						|
 | 
						|
/** Setup the internal objects needed for UT_NEW() to operate.
 | 
						|
This must be called before the first call to UT_NEW(). */
 | 
						|
void ut_new_boot()
 | 
						|
{
 | 
						|
  PSI_MEMORY_CALL(register_memory)("innodb", pfs_info, static_cast<int>
 | 
						|
                                   UT_ARR_SIZE(pfs_info));
 | 
						|
 | 
						|
  PSI_memory_info pfs_info_auto[NKEYS];
 | 
						|
  for (int i= 0; i < NKEYS; i++)
 | 
						|
  {
 | 
						|
    pfs_info_auto[i]= {&auto_event_keys[i], auto_event_names[i], 0};
 | 
						|
  }
 | 
						|
 | 
						|
  PSI_MEMORY_CALL(register_memory)("innodb", pfs_info_auto,NKEYS);
 | 
						|
}
 | 
						|
 | 
						|
/** Retrieve a memory key (registered with PFS), corresponding to source file .
 | 
						|
 | 
						|
@param[in] autoevent_idx - offset to the auto_event_names corresponding to the
 | 
						|
file name of the caller.
 | 
						|
 | 
						|
@return registered memory key or PSI_NOT_INSTRUMENTED
 | 
						|
*/
 | 
						|
PSI_memory_key ut_new_get_key_by_file(uint32_t autoevent_idx)
 | 
						|
{
 | 
						|
  ut_ad(autoevent_idx < NKEYS);
 | 
						|
  return auto_event_keys[autoevent_idx];
 | 
						|
}
 | 
						|
 | 
						|
#else /* UNIV_PFS_MEMORY */
 | 
						|
void ut_new_boot(){}
 | 
						|
#endif
 |