Mercurial > hg > openjdk > jdk8u > hotspot
changeset 8982:af43bab3c5d0 jdk8u222-b03
8151322: Implement os::set_native_thread_name() on Solaris
Reviewed-by: sla, kbarrett, gziemski
author | dholmes |
---|---|
date | Fri, 17 May 2019 18:13:25 +0100 |
parents | bf1c9a3312a4 |
children | 00837a7bc349 2afa5ff125ac |
files | src/os/solaris/vm/os_solaris.cpp src/os/solaris/vm/os_solaris.hpp src/share/vm/utilities/globalDefinitions.hpp |
diffstat | 3 files changed, 22 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os/solaris/vm/os_solaris.cpp Mon Oct 13 22:11:39 2014 +0200 +++ b/src/os/solaris/vm/os_solaris.cpp Fri May 17 18:13:25 2019 +0100 @@ -160,6 +160,7 @@ address os::Solaris::_main_stack_base = NULL; // 4352906 workaround +os::Solaris::pthread_setname_np_func_t os::Solaris::_pthread_setname_np = NULL; // "default" initializers for missing libc APIs extern "C" { @@ -519,8 +520,15 @@ } void os::set_native_thread_name(const char *name) { - // Not yet implemented. - return; + if (Solaris::_pthread_setname_np != NULL) { + // Only the first 31 bytes of 'name' are processed by pthread_setname_np + // but we explicitly copy into a size-limited buffer to avoid any + // possible overflow. + char buf[32]; + snprintf(buf, sizeof(buf), "%s", name); + buf[sizeof(buf) - 1] = '\0'; + Solaris::_pthread_setname_np(pthread_self(), buf); + } } bool os::distribute_processes(uint length, uint* distribution) { @@ -4921,6 +4929,13 @@ // the minimum of what the OS supports (thr_min_stack()), and // enough to allow the thread to get to user bytecode execution. Solaris::min_stack_allowed = MAX2(thr_min_stack(), Solaris::min_stack_allowed); + + // retrieve entry point for pthread_setname_np + void * handle = dlopen("libc.so.1", RTLD_LAZY); + if (handle != NULL) { + Solaris::_pthread_setname_np = + (Solaris::pthread_setname_np_func_t)dlsym(handle, "pthread_setname_np"); + } // If the pagesize of the VM is greater than 8K determine the appropriate // number of initial guard pages. The user can change this with the // command line arguments, if needed.
--- a/src/os/solaris/vm/os_solaris.hpp Mon Oct 13 22:11:39 2014 +0200 +++ b/src/os/solaris/vm/os_solaris.hpp Fri May 17 18:13:25 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -132,6 +132,9 @@ static void set_SIGinterrupt(int newsig) { _SIGinterrupt = newsig; } static void set_SIGasync(int newsig) { _SIGasync = newsig; } + typedef int (*pthread_setname_np_func_t)(pthread_t, const char*); + static pthread_setname_np_func_t _pthread_setname_np; + public: // Large Page Support--ISM. static bool largepage_range(char* addr, size_t size);
--- a/src/share/vm/utilities/globalDefinitions.hpp Mon Oct 13 22:11:39 2014 +0200 +++ b/src/share/vm/utilities/globalDefinitions.hpp Fri May 17 18:13:25 2019 +0100 @@ -332,7 +332,7 @@ // so far from the middle of the road that it is likely to be problematic in // many C++ compilers. // -#define CAST_TO_FN_PTR(func_type, value) ((func_type)(castable_address(value))) +#define CAST_TO_FN_PTR(func_type, value) (reinterpret_cast<func_type>(value)) #define CAST_FROM_FN_PTR(new_type, func_ptr) ((new_type)((address_word)(func_ptr))) // Unsigned byte types for os and stream.hpp