Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:8263185-Mallinfo-deprecated-in...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:8263185-Mallinfo-deprecated-in-glibc-2.33.patch of Package openjdk-1.8.0
From ccd4293dbec4b1048bf7eb342b8de8241a3667d4 Mon Sep 17 00:00:00 2001 From: eapen <zhangyipeng7@huawei.com> Date: Mon, 12 Dec 2022 18:44:43 +0800 Subject: [PATCH 13/33] I68TO2: 8263185: Mallinfo deprecated in glibc 2.33 --- hotspot/src/os/linux/vm/os_linux.cpp | 39 ++++++++++++++++++++++++++---------- hotspot/src/os/linux/vm/os_linux.hpp | 34 +++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 11 deletions(-) diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index c687b1c..099dafa 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -152,6 +152,11 @@ const char * os::Linux::_glibc_version = NULL; const char * os::Linux::_libpthread_version = NULL; pthread_condattr_t os::Linux::_condattr[1]; +#ifdef __GLIBC__ +os::Linux::mallinfo_func_t os::Linux::_mallinfo = NULL; +os::Linux::mallinfo2_func_t os::Linux::_mallinfo2 = NULL; +#endif // __GLIBC__ + static jlong initial_time_count=0; static int clock_tics_per_sec = 100; @@ -2343,18 +2348,25 @@ void os::Linux::print_process_memory_info(outputStream* st) { // Print glibc outstanding allocations. // (note: there is no implementation of mallinfo for muslc) #ifdef __GLIBC__ - struct mallinfo mi = ::mallinfo(); - - // mallinfo is an old API. Member names mean next to nothing and, beyond that, are int. - // So values may have wrapped around. Still useful enough to see how much glibc thinks - // we allocated. - const size_t total_allocated = (size_t)(unsigned)mi.uordblks; - st->print("C-Heap outstanding allocations: " SIZE_FORMAT "K", total_allocated / K); - // Since mallinfo members are int, glibc values may have wrapped. Warn about this. - if ((info.vmrss * K) > UINT_MAX && (info.vmrss * K) > (total_allocated + UINT_MAX)) { - st->print(" (may have wrapped)"); + size_t total_allocated = 0; + bool might_have_wrapped = false; + if (_mallinfo2 != NULL) { + struct glibc_mallinfo2 mi = _mallinfo2(); + total_allocated = mi.uordblks; + } else if (_mallinfo != NULL) { + // mallinfo is an old API. Member names mean next to nothing and, beyond that, are int. + // So values may have wrapped around. Still useful enough to see how much glibc thinks + // we allocated. + struct glibc_mallinfo mi = _mallinfo(); + total_allocated = (size_t)(unsigned)mi.uordblks; + // Since mallinfo members are int, glibc values may have wrapped. Warn about this. + might_have_wrapped = (info.vmrss * K) > UINT_MAX && (info.vmrss * K) > (total_allocated + UINT_MAX); + } + if (_mallinfo2 != NULL || _mallinfo != NULL) { + st->print_cr("C-Heap outstanding allocations: " SIZE_FORMAT "K%s", + total_allocated / K, + might_have_wrapped ? " (may have wrapped)" : ""); } - st->cr(); #endif // __GLIBC__ @@ -5174,6 +5186,11 @@ void os::init(void) { Linux::initialize_system_info(); +#ifdef __GLIBC__ + Linux::_mallinfo = CAST_TO_FN_PTR(Linux::mallinfo_func_t, dlsym(RTLD_DEFAULT, "mallinfo")); + Linux::_mallinfo2 = CAST_TO_FN_PTR(Linux::mallinfo2_func_t, dlsym(RTLD_DEFAULT, "mallinfo2")); +#endif // __GLIBC__ + // _main_thread points to the thread that created/loaded the JVM. Linux::_main_thread = pthread_self(); diff --git a/hotspot/src/os/linux/vm/os_linux.hpp b/hotspot/src/os/linux/vm/os_linux.hpp index 2c4efff..2bb3fd2 100644 --- a/hotspot/src/os/linux/vm/os_linux.hpp +++ b/hotspot/src/os/linux/vm/os_linux.hpp @@ -338,6 +338,40 @@ private: }; static NumaAllocationPolicy _current_numa_policy; +#ifdef __GLIBC__ + struct glibc_mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; + }; + + struct glibc_mallinfo2 { + size_t arena; + size_t ordblks; + size_t smblks; + size_t hblks; + size_t hblkhd; + size_t usmblks; + size_t fsmblks; + size_t uordblks; + size_t fordblks; + size_t keepcost; + }; + + typedef struct glibc_mallinfo (*mallinfo_func_t)(void); + typedef struct glibc_mallinfo2 (*mallinfo2_func_t)(void); + + static mallinfo_func_t _mallinfo; + static mallinfo2_func_t _mallinfo2; +#endif + public: static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; } static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) { -- 1.8.3.1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2