diff --git a/storage/innobase/include/os0proc.h b/storage/innobase/include/os0proc.h index a73ba5a9e8419..823da83c63e87 100644 --- a/storage/innobase/include/os0proc.h +++ b/storage/innobase/include/os0proc.h @@ -40,7 +40,7 @@ typedef unsigned long int os_process_id_t; /** The total amount of memory currently allocated from the operating system with os_mem_alloc_large(). */ -extern ulint os_total_large_mem_allocated; +extern Atomic_counter os_total_large_mem_allocated; /** Whether to use large pages in the buffer pool */ extern my_bool os_use_large_pages; diff --git a/storage/innobase/os/os0proc.cc b/storage/innobase/os/os0proc.cc index 1a6da03a4023f..86c11f48a8a7a 100644 --- a/storage/innobase/os/os0proc.cc +++ b/storage/innobase/os/os0proc.cc @@ -36,7 +36,7 @@ MAP_ANON but MAP_ANON is marked as deprecated */ /** The total amount of memory currently allocated from the operating system with os_mem_alloc_large(). */ -ulint os_total_large_mem_allocated = 0; +Atomic_counter os_total_large_mem_allocated; /** Whether to use large pages in the buffer pool */ my_bool os_use_large_pages; @@ -100,9 +100,7 @@ os_mem_alloc_large( if (ptr) { *n = size; - my_atomic_addlint( - &os_total_large_mem_allocated, size); - + os_total_large_mem_allocated += size; UNIV_MEM_ALLOC(ptr, size); return(ptr); } @@ -127,8 +125,7 @@ os_mem_alloc_large( ib::info() << "VirtualAlloc(" << size << " bytes) failed;" " Windows error " << GetLastError(); } else { - my_atomic_addlint( - &os_total_large_mem_allocated, size); + os_total_large_mem_allocated += size; UNIV_MEM_ALLOC(ptr, size); } #else @@ -143,8 +140,7 @@ os_mem_alloc_large( " errno " << errno; ptr = NULL; } else { - my_atomic_addlint( - &os_total_large_mem_allocated, size); + os_total_large_mem_allocated += size; UNIV_MEM_ALLOC(ptr, size); } #endif @@ -163,8 +159,7 @@ os_mem_free_large( #if defined HAVE_LINUX_LARGE_PAGES && defined UNIV_LINUX if (os_use_large_pages && os_large_page_size && !shmdt(ptr)) { - my_atomic_addlint( - &os_total_large_mem_allocated, -size); + os_total_large_mem_allocated -= size; UNIV_MEM_FREE(ptr, size); return; } @@ -176,8 +171,7 @@ os_mem_free_large( ib::error() << "VirtualFree(" << ptr << ", " << size << ") failed; Windows error " << GetLastError(); } else { - my_atomic_addlint( - &os_total_large_mem_allocated, -lint(size)); + os_total_large_mem_allocated -= size; UNIV_MEM_FREE(ptr, size); } #elif !defined OS_MAP_ANON @@ -191,8 +185,7 @@ os_mem_free_large( ib::error() << "munmap(" << ptr << ", " << size << ") failed;" " errno " << errno; } else { - my_atomic_addlint( - &os_total_large_mem_allocated, -size); + os_total_large_mem_allocated -= size; UNIV_MEM_FREE(ptr, size); } #endif diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index d9b7934f11998..332cb77322115 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1329,7 +1329,7 @@ srv_printf_innodb_monitor( fprintf(file, "Total large memory allocated " ULINTPF "\n" "Dictionary memory allocated " ULINTPF "\n", - os_total_large_mem_allocated, + ulint{os_total_large_mem_allocated}, dict_sys_get_size()); buf_print_io(file);